在节点/快递中启用CORS但是获得"对预检请求的响应没有通过访问控制检查"

时间:2018-05-29 03:04:23

标签: node.js http express cors axios

我收到错误:

  

无法加载http://localhost:3000/users/register:对预检请求的响应未通过访问控制检查:否' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:8080'因此不允许访问。

在前端我使用axios:

const instance = axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 1000,
  headers: {"Access-Control-Allow-Origin": "*"}
});

instance.post('/users/register').then((res) => {
  console.log(res);
}).catch((err) => {
  console.log(err);
});

在服务器端使用express我正在使用cors:

var cors = require('cors');
var corsOptions = {
   origin: '*',
   optionsSuccessStatus: 200 
}
app.use(cors(corsOptions));

我的响应代码为200,我确实看到了“访问控制 - 允许 - 来源”#39;标题但我在服务器端没有得到任何东西。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您很可能还需要明确启用对OPTIONS请求的支持(即“CORS预检”)。有关如何执行此操作的详细信息,请参阅https://github.com/expressjs/cors#enabling-cors-pre-flight

对于您的具体情况,我会添加以下内容:

app.options('/users/register', cors(corsOptions));

或者如果您想为所有请求启用它:

app.options('*', cors(corsOptions));