首页 > 解决方案 > 使用简单的 nodejs 服务器未定义 CORS 来源

问题描述

我有一个非常简单的 nodejs 服务器,但由于某种原因,使用“cors”包似乎无法识别请求的来源。

这是我的nodejs服务器配置:

const cors = require('cors');
const express = require('express');

const CORS_WHITELIST = [ 'http://localhost:5000' ];

const corsOptions = {
  origin: (origin, callback) => {
    console.log(origin) // ----> this is always 'undefined'
    if (CORS_WHITELIST.indexOf(origin) !== -1){
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
};

const configureServer = app => {
    app.use(cors(corsOptions));
};

module.exports = configureServer;

这是我的服务器启动文件:

const express = require('express');

const SERVER_CONFIGS = require('./constants/server');

const configureServer = require('./server');
const configureRoutes = require('./routes');

const app = express();

configureServer(app);
configureRoutes(app);

app.listen(SERVER_CONFIGS.PORT, error => {
  if (error) throw error;
  console.log('Server running on port: ' + SERVER_CONFIGS.PORT);
});

我在 localhost 上运行此服务器,但 cors 回调中的来源始终是“未定义”。例如,当我在浏览器上打开http://localhost:5000或进行 curl 调用时。

如何使用 cors 使其不会阻止本地主机上的请求?

标签: node.jscors

解决方案


我读了这个问题,req.headers.origin 是未定义的问题,也是CORS 和 Origin 标头

来源

如果用户来自 ssl 加密网站,则来源可能会被隐藏。

另外:一些浏览器扩展从 http-request 标头中删除了 origin 和 referer,因此 origin 属性将为空。

有一个解决方案可以通过添加中间件来解决这个问题:

app.use(function (req, res, next) {
  req.headers.origin = req.headers.origin || req.headers.host;
  next();
});

我希望这些有帮助。问题在awaiting more info状态!


推荐阅读