Я работаю над веб-приложением, использующим Go, JavaScript и PostgreSQL.
У меня нет проблем связать мою программу Go с базой данных. Но у меня есть некоторые проблемы с JavaScript.
Вот мой код Go, который подключается к моей БД и возвращает случайный элемент моей таблицы, когда я звоню localhost:8080
:
type Quote struct {
ID int
Phrase string
Author string
}
var db *sql.DB
func init() {
var err error
db, err = sql.Open("postgres", "postgres://gauthier:password@localhost/quotes?sslmode=disable")
if err != nil {
panic(err)
}
if err = db.Ping(); err != nil {
panic(err)
}
fmt.Println("You connected to your database")
}
func getQuotes(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed)
return
}
rows, err := db.Query("SELECT id, phrase, author FROM citations ORDER BY RANDOM() LIMIT 1;")
if err != nil {
http.Error(w, http.StatusText(500), 500)
return
}
defer rows.Close()
quotations := make([]Quote, 0)
for rows.Next() {
qt := Quote{}
err := rows.Scan(&qt.ID, &qt.Phrase, &qt.Author)
if err != nil {
panic(err)
}
quotations = append(quotations, qt)
}
if err = rows.Err(); err != nil {
panic(err)
}
for _, qt := range quotations {
payload, _ := json.Marshal(qt)
w.Header().Add("Content-Type", "application/json")
w.Write(payload)
}
}
func main() {
http.HandleFunc("/", getQuotes)
http.ListenAndServe(":8080", nil)
}
Когда я запускаю эту программу и использую curl -i localhost:8080
, она возвращает мне то, что я ожидаю, случайную цитату из моей БД
`gauthier@gauthier-Latitude-7280:~/gocode/sprint0$ curl -i localhost:8080
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 30 Aug 2018 12:28:00 GMT
Content-Length: 116
{"ID":7,"Phrase":"I've never had a problem with drugs. I've had problems with the police","Author":"Keith Richards"}`
Теперь, когда я пытаюсь сделать тот же запрос, но с JavaScript вместо того, чтобы свернуться с этим маленьким скриптом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Random quote</title>
</head>
<body>
<script type="text/javascript" language="javascript">
function getQuotations() {
httpRequest= new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
alertContents(httpRequest)
};
httpRequest.open("GET", "http://localhost:8080", true);
}
function alertContents(httpRequest) {
console.log("http status: "+httpRequest.status);
console.log("http response: "+httpRequest.responseText);
}
</script>
<button onclick="getQuotations()">Click here for a quotation</button>
</body>
</html>
Когда я нажимаю на кнопку и открываю консоль Chromium, я получаю:
http status: 0 hello.html:18
http response: hello.html:19
Может кто-нибудь мне помочь?