Express JS:请求的资源上不存在“Access-Control-Allow-Origin”标头

新手上路,请多包涵

我有一个在服务器上运行的 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;

以下 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) {

    }
});

我试过: 将请求域放在“Access-Control-Allow-Origin”标头中 使用 cors 模块进行快速 将我的 router.all 函数放在中间件中

请求域是 HTTP,api 域是在 HTTPS 上。但是,我在启用 HTTP 时让它工作。

有没有人知道为什么不发送“Access-Control-Allow-Origin”标头?

谢谢

原文由 Tom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 405
2 个回答

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

 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;

希望这可以帮助!

原文由 David R 发布,翻译遵循 CC BY-SA 3.0 许可协议

您也可以使用 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

原文由 M J 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏