【问题标题】:cannot fetch from local nodejs server无法从本地 nodejs 服务器获取
【发布时间】:2021-02-24 09:34:16
【问题描述】:

我显然尝试从本地 nodejs 服务器获取数据,但出现了奇怪的错误。这是带有 express 的简单服务器

let express = require('express')
let server = express()
server.listen(3100)
server.get("/", (req, res) => {
res.send("hello") })

这是我反应中的代码。我只在useEffect中使用它

fetch('http://localhost:3100/', {
        headers: 'Access-Control-Allow-Origin',
        method: "GET"
    })
        .then(res => res.json())
        .then(response => {
            console.log(response)
        })
        .catch(err => console.log(err))

我得到了这个错误

Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'Window': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)'

我不知道为什么会这样,我环顾互联网,但仍然没有得到解决方案。感谢您的任何建议!

【问题讨论】:

  • headers 是一个对象,而且Access-Control-Allow-Origin 应该由server 方完成。 headers: { 'Content-type': 'application/json', etc...}
  • 这确实是一个奇怪的错误,但有时节点调试很混乱,错误似乎无关紧要。相关错误可能与跨域有关,因为我假设您在不同的本地端口上运行“获取”应用程序并需要启用 cors。您需要添加 server.use(cors());到您的节点应用程序以启用跨域请求
  • @StavrosAngelis — 这是浏览器端错误,与 Node 无关。
  • 是的,但如果服务器 API 不允许跨域请求,“获取”请求也会失败,因此也需要修复。

标签: javascript node.js reactjs express


【解决方案1】:

错误是因为headers的值不能是字符串。

它应该是一个普通对象(或Headers 实例),其中每个属性都是一个标题名称,关联的值是标题值。 (Source)

headers: {
    "X-Example-Request-Header": "Example value"
}

在这种特殊情况下,您根本不应该设置headersAccess-Control-Allow-Originresponse 标头,而不是请求标头。将其添加到请求中只会导致问题。

请参阅this question 了解有关该主题的进一步阅读,并参阅cors middleware 以将 CORS 权限添加到您的 Express 服务器。

【讨论】:

    【解决方案2】:

    您需要添加一个不是string 类型的标题,它应该是Header 类型

    fetch(' URL ... ',
    {
    method: "GET",
        headers: new Headers({
            Accept: 'application/json',
            'Content-Type': 'multipart/form-data'
        }),
        body: formData
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2017-07-02
      • 2021-04-29
      相关资源
      最近更新 更多