node.js - 使用简单的 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 使其不会阻止本地主机上的请求?
解决方案
我读了这个问题,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
状态!
推荐阅读
- javascript - 页面加载后是否可以更改css样式表?
- azure-devops - 在 Azure DEVOPS 中预先批准后手动部署
- c# - UWP 响应控制宽度变化
- ruby-on-rails - Rails 上的 parselyjs 和 webpack
- c++ - 整数未复制到对象中的数组
- cassandra - 如何为 Cassandra 创建连接池?
- google-bigquery - 为什么 Bigquery 给我的结果是两行,而我期望有一行
- spring-boot - spring boot Redis 配置 - 发生连接失败。5000毫秒后重启订阅任务
- python - 从 Python Dataframe 列中提取唯一的字符串列表
- pandas - Pandas:具有多个条件的子集的子集