#javascript #node.js #express #fetch
#javascript #node.js #экспресс #выборка
Вопрос:
Сообщение об ошибке: неперехваченный (в обещании) Ошибка типа: не удалось выполнить ‘выборку’ в ‘Window’: недопустимое имя
Огляделся, я понятия не имею, что не так. Я пытаюсь создать веб-сайт, чтобы в конечном итоге отправить запрос GET на сторонний сервер. Но этот код был тестом, чтобы увидеть, как я могу отправлять данные со стороны клиента на мой сервер.
let summoner = "playerName.value";
let fetchData = {
method: "POST",
headers: {
"Content-Type:": "application/son user search choice"
},
body: JSON.stringify(summoner)
};
fetch("/", fetchData);
Серверный код
const express = require("express");
const app = express();
app.listen(4000, () => console.log("listening at 4000"));
app.use(express.static("public"));
app.post("/", (req, res) => {
// res.send("POST request to the homepage")
console.log(req);
});
Комментарии:
1. Я думаю, что ваш Content-Type неверен, что и вызывает ошибку.. Это должно быть «application / json»
2. Тип содержимого не является просто заголовком для предоставления контекста.
3. Вы правы, однако ваш «Content-Type» отображается как «Content-Type:» с двоеточием. Удалите двоеточие, и это должно сработать. Только что проверил это сам, и добавление двоеточия выдало мне ту же ошибку, что и вы, поскольку «Content-Type:» является недопустимым заголовком (недопустимое имя), но удаление двоеточия прошло успешно.
4. @Chris прав. Стандартом для интерпретации http-заголовков является использование пар ключ-значение, разделенных двоеточием. Добавление дополнительного двоеточия в заголовок HTTP нарушает спецификацию. Fetch проверяет это и выдает TypeError вместо того, чтобы позволить пользователю отправить неработающий запрос.
5. БОЖЕ, я ЛЮБЛЮ ТЕБЯ! Вы совершенно правы, извините, я должен был обратить внимание на то, что вы сказали больше.
Ответ №1:
Я думаю, проблема вызвана тем, что вы используете промежуточные программы после вызова app.listen()
Возможно, это решит вашу проблему:
const express = require("express");
const app = express();
const cors = require("cors");
app.use(express.static("public"));
/* I added cors middleware because if your client is isolated, will be able to call your server.*/
app.use(cors());
app.post("/", (req, res) => {
// res.send("POST request to the homepage")
console.log(req);
});
app.listen(4000, () => console.log("listening at 4000"));
Если вы используете только ванильный JS, я рекомендую вам использовать XMLHttpRequest для вызова вашего сервера, но если вы используете фреймворк JS, я рекомендую использовать axios