Клиент на Javascript и сервер на Go не взаимодействуют. Fetch
Я пытаюсь создать простейшее приложение по обмену информацией между клиентом на HTML+CSS+JavaScript и сервером на Go. Использую Fetch. В качестве среды разработки применяю Visual Studio Code. После запуска сервера и перехода по адресу, я получаю от него корректный ответ: "Сервер запущен на порту 5500". Далее запускаю клиент с помощью Live Server. Но после нажатия на кнопку надпись на ней меняется на код HTML-файла, а не на сообщение от сервера. Что я делаю не так?
const btn = document.getElementById("btn");
btn.addEventListener("click", function() {
fetch("http://localhost:5500")
.then(response => {
if (!response.ok) {
throw new Error("Ошибка");
}
return response.text();
})
.then(data => {
btn.textContent = data;
})
.catch(error => {
console.error("Error:", error);
});
});
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Простое веб-приложение</title>
</head>
<body>
<button id="btn">Нажать</button>
<script src="script.js"></script>
</body>
</html>
Код на Go
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
fmt.Fprint(w, "Привет от сервера на Go!")
}
func main() {
http.HandleFunc("/", handler)
err := http.ListenAndServe(":5500", nil)
if err != nil {
log.Println(err)
return
}
log.Println("Сервер запущен на порту 5500")
}
Ответы (1 шт):
Проблема заключалась в том, что браузер выбирал рандомный порт, необходимо было активировать CORS-запросы. Добавление дополнительной строки w.Header().Set("Access-Control-Allow-Origin", "*") к функции handler решило проблему.