【问题标题】:TypeError: Failed to fetch from http siteTypeError:无法从 http 站点获取
【发布时间】:2021-12-13 00:07:55
【问题描述】:

这是我的 nodejs 代码,与 https 网站完美配合。

app.use(cors({ origin: '*' }));
app.use(express.json())
app.use("/user", userRouter);
app.use("/mention", mentionRouter);
app.use("/request", requestRouter);

但问题是,如果我从任何 HTTP 站点发送请求,我会收到一条错误消息 TypeError: Failed to fetch 并且没有得到响应。这是我的前端代码。

  const response = await fetch(WEB_URL + "mention", {
    method: "POST",
    body: JSON.stringify({
      to: users,
      text,
      link: window.location.toString(),
    }),
    headers: {
      "x-access-token": accessToken,
      "Content-Type": "application/json",
    },
  });

我尝试了来自 Getting "TypeError: failed to fetch" when the request hasn't actually failed 的答案,但没有奏效。

【问题讨论】:

    标签: node.js cors


    【解决方案1】:

    很抱歉成为那些人中的一员,但您的变量未在您的 sn-p 中定义,因此我无法真正看到您定义的内容。示例:

    const response = await fetch(WEB_URL + "mention",
    

    没有人知道WEB_URL 是什么意思,这可能是问题的一部分。 此外,window.location 可以像http://example.com/ 一样使用,但它是一个对象,所以它可以打印"[object Object]"。相反,请尝试使用window.location.href。您的问题很可能是出于安全原因,Fetch JS API 不适用于HTTP 站点。问题不多了。

    【讨论】:

    • WEB_URL 指向我的本地主机,window.location.toString() 给出了我当前所在的 url。他们为我工作得很好。实际上,问题中提到的错误实际上使我此刻无言以对。感谢您的评论。顺便问一下,安全原因是什么?
    • HTTP 手段(超文本传输​​协议)和 HTTPS 手段(超文本传输​​协议安全)。原因是通过 Internet 传输数据时 HTTP 不安全,因此出于安全原因,浏览器不会让具有 HTTP 的不安全站点使用特殊 API。
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2023-03-25
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多