【问题标题】:JavaScript code runs in node.js but not browser [duplicate]JavaScript代码在node.js中运行,但不在浏览器中[重复]
【发布时间】:2022-01-31 21:37:54
【问题描述】:

我有这个代码:

async function my_function() {
    console.log("Hello");

    let response = await fetch(url, {
        mode: 'no-cors'
    })
        .then(response => response.json()) // THIS LINE

        .then(response => {
            console.log(response);
        })
}

如果我在 node.js 中包含 const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));,效果会很好。但是,这不会在浏览器中运行。当我在 google chrome 中运行此代码时,出现此错误

Uncaught (in promise) SyntaxError: Unexpected end of input

有关

.then(response => response.json()) // THIS LINE

线。我做错了什么?

【问题讨论】:

  • "Unexpected end of input" 对我来说听起来像是 JSON 解析错误。您能否在 devtools 网络面板中验证您实际上得到了预期的响应?
  • @Bergi — JSON 解析错误是因为响应不透明,因为它设置为no-cors 模式。
  • @digitalniweb CORS 是一项了不起的技术,因为它允许您在想要共享数据时降低浏览器的内置安全功能,并在可能对用户数据造成风险时将其保留.

标签: javascript


【解决方案1】:

因为你把 Promises 和 await 混在一起了?任选其一。 阅读此https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await

【讨论】:

  • 没有。使用await没有意义,但与问题无关
【解决方案2】:

对于浏览器,您必须启用 cors-policy 否则它将不起作用。因此,在您的 API 中,您必须包括:

"Access-Control-Allow-Origin" : "*", 

并且还禁用了 no-cors 模式。

【讨论】:

  • 我该怎么做,如果我以后部署这个应用程序,我的用户是否也必须这样做?
  • 我更新了答案
  • 这还不够,因为您还必须禁用 no-cors 模式。 "Access-Control-Allow-Credentials" : true 毫无意义,因为凭证模式是同源(默认)。
  • 是的,我已经更新了我的回复,很抱歉造成混乱
猜你喜欢
  • 2019-10-18
  • 2015-01-09
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
相关资源
最近更新 更多