【问题标题】:Why isn't my Fetch request sending custom headers in React-Native?为什么我的 Fetch 请求没有在 React-Native 中发送自定义标头?
【发布时间】:2020-02-16 17:46:43
【问题描述】:

我正在调用类似于此的获取请求。

fetch('https://api-endpoint.com/api',
        {
            method: "POST",
            headers: new Headers({
                'custom-header': 'custom header value'
            })
        }
     )
    .then(res=>{
        /* code */
    })
    .catch(err=>{
        /* code */
    })

但似乎没有将标头发送到服务器。服务器在 Node.js 上运行,我正在尝试使用 React-Native 访问它。

我已在服务器上允许"access-control-allow-origin": "*",但无济于事。

我还可以访问服务器上不需要任何标头的其他端点。

最后,我将标题设置为 new Headers() 和对象。

我究竟缺少什么来允许发送标头?有没有办法在 react-native 中查看我的请求到底发生了什么?

它在邮递员中工作得很好。

编辑:

我在我的服务器中使用 cors 中间件。

app.use(cors())

appConfig.init(app);

【问题讨论】:

  • 你不需要Headers 构造函数和fetch 作为你尝试过的对象就可以了:headers : { custom-header : 'custom header value' }
  • 你能提供你的服务器端nodejs代码吗?
  • 你看我的回答了吗?

标签: javascript node.js react-native fetch


【解决方案1】:

你可以在使用路线之前添加这些行并尝试吗?

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");

  res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");

  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization, custom-header"
  );

  res.header("Access-Control-Expose-Headers", "custom-header");

  next();
});

如果你使用的是 express cors 中间件,你可以添加 allowedHeaders 和exposedHeaders 选项。

https://github.com/expressjs/cors#configuration-options

请注意,如果这些配置替换了默认标头,您可能需要将默认标头添加到选项中。

app.use(
  cors({
    exposedHeaders: ["custom-header"],
    allowedHeaders: ["custom-header"]
  })
);

最后你最好使用这样的 fetch api 来发送标头:

fetch('https://api-endpoint.com/api',
  {
    method: "POST",
    headers: {
      "custom-header": "custom header value"
    }
  }
)
  .then(res => {
    /* code */
  })
  .catch(err => {
    /* code */
  })

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

【讨论】:

  • 我使用的是cors middleware package,所以我所做的只是设置app.use(cors()),它设置了几个默认选项。
  • @BrandonArmand 您是否将自定义标头添加到 allowedHeaders 并在 cors 选项中添加了暴露标头?
  • 在你回复我之前我就想通了。谢谢, allowedHeaders: ["custom-header"] 让它工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 2016-08-15
  • 2013-01-24
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多