Неперехваченная (в обещании) Ошибка типа: выборка в окне. Экспресс-сервер

#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