Express JS:请求的资源上没有"Access-Control-Allow-Origin"标头

Tom*_*Tom 4 javascript ajax node.js cors express

我有一个在服务器上运行的API和一个连接到它的前端客户端来检索数据.我做了一些关于跨域问题的研究并且有效.但是我不确定发生了什么变化.我现在在控制台中收到此错误:

XMLHttpRequest无法加载https://api.mydomain/api/status.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http://beta.mydomain.com "访问.响应具有HTTP状态代码502.

我有以下路由文件:

var express = require('express');
var router = express.Router();
var Assessment = require('../app/models/assessment');

router.all('*', function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
});


router.post('/api/status', function (req, res, next) {
    getStatus.getStatus(req, res, Assessment);
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

以下JavaScript对该路由进行Ajax调用:

var user = {
    'uid' : '12345'
};
$.ajax({
    data: user,
    method: 'POST',
    url: 'https://api.mydomain/api/status',
    crossDomain: true,
    done: function () {
    },
    success: function (data) {
        console.log(JSON.stringify(data));
    },
    error: function (xhr, status) {

    }
});
Run Code Online (Sandbox Code Playgroud)

我试过:将请求域放在'Access-Control-Allow-Origin'标题中使用cors模块进行表达将我的router.all函数放入中间件

请求域是HTTP,api域是HTTPS.但是,在启用HTTP时,我已经使用了它.

有没有人知道为什么没有发送'Access-Control-Allow-Origin'标题?

谢谢

Dav*_*d R 23

而不是将请求标头设置为您的快速路由,您可以尝试将其设置为像这样表达实例本身,

var express = require('express');
var app = express();
var Assessment = require('../app/models/assessment');

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.post('/api/status', function (req, res, next) {
    // your code goes here
});

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 不适合我... (2认同)

M J*_*M J 6

你也可以使用 cors npm 来做同样的事情。

**npm i cors**

const cors = require('cors')

var corsOptions = {
  origin: '*',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 
}
app.use(cors(corsOptions));

var routes = require('./api/routes/route'); //importing route
routes(app); //register the route
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用这种方法,它应该可以工作,但是当请求很重时,它对​​我来说失败了,给我同样的“无访问控制允许来源”错误。 (8认同)