Safari上带有axios POST请求的“网络错误”,但可在其他浏览器上使用

时间:2019-07-12 10:42:10

标签: javascript node.js express cors axios

我在后端使用Nodejs,在前端使用reactjs。

我已经尝试过类似发布的问题的解决方案,但似乎没有一个可行。

中间件和路由:

const root = path.join(__dirname, '../../build');  
app.use(express.static(root));
app.get('*', (req, res) => {
  res.sendFile('index.html', { root });
});
app.use(cors());
app.use('/api', routes(app));

answer.post.js

   try {
      const answer = await Answer.create(answerReq);
      console.log(answer);
      res.send(answer);
    } catch (error) {
      next(new Error(error));
    }

创建答案对象的位置,并按预期在控制台上显示。 在前端发布请求:

const apiEndpoint = "/api/answer";
axios.post(apiEndpoint, { data });

最奇怪的是,它可以在其他浏览器上运行,但不能在野生动物园中使用。在野生动物园中,我只会收到“网络错误”。

编辑:错误显示为警报

axios.interceptors.response.use(null, error => {
  const expectedError =
    error.response &&
    error.response.status >= 400 &&
    error.response.status < 500;

  if (!expectedError) {
    alert("Error: ", error);
  }

  return Promise.reject(error);
});

2 个答案:

答案 0 :(得分:1)

对我来说,在端点的末尾添加 / 解决了这个问题(仅在 Safari 中发生),即尝试使用 /api/answer/ 而不是 /api/answer

答案 1 :(得分:0)

通过切换到节点获取库来解决: https://www.npmjs.com/package/node-fetch

仍然对为什么使用axios时会发生问题的原因