【问题标题】:Uncaught (in promise) TypeError: Fetch on Window. Express ServerUncaught (in promise) TypeError: Fetch on Window。快递服务器
【发布时间】:2020-12-08 05:08:35
【问题描述】:

错误消息:未捕获(承诺中)类型错误:无法在“窗口”上执行“获取”:名称无效

环顾四周,我不知道出了什么问题。我正在尝试创建一个网站以最终将 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);
});

【问题讨论】:

  • 我认为您的 Content-Type 不正确,这是导致错误的原因。应该是“application/json”
  • No Content-Type 只是提供上下文的标头。
  • 您是对的,但是您的“Content-Type”显示为“Content-Type:”并带有冒号。删除冒号,它应该可以工作。刚刚自己测试了这个并在那里添加冒号给了我你收到的相同错误,因为“Content-Type:”是一个无效的标题(无效的名称),但删除冒号是成功的。
  • @Chris 是正确的。解释 http 标头的标准是冒号分隔的键值对。在 HTTP 标头中添加一个额外的冒号会破坏规范。 Fetch 对此进行检查并抛出 TypeError,而不是让用户发送损坏的请求。
  • 天哪,我爱你!你完全正确,对不起,我应该注意你说的更多。

标签: javascript node.js express fetch


【解决方案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"));

如果您只使用 vanilla JS,我建议您使用 XmlHttpRequest 来调用您的服务器,但如果您使用的是 JS 框架,我建议您使用 axios

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 2020-07-10
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多