rab*_*ill 5 javascript node.js cors express mean-stack
我正在开发一个在 MEAN 堆栈上运行的小应用程序,但遇到了一个恼人的问题:我的后端应用程序(带有Express 的Node )正在运行http://localhost:3000并且工作得很好,但是我的前端客户端应用程序(带有 AngularJS 的 Javascript)正在运行http://localhost:8000,这意味着从 Angular 发送的请求会被接收和响应,但一旦到达就会被拒绝,因为它们被解释为来自不同的来源。
通过让我的“向我展示所有东西”方法看起来像这样,我能够用相对较少的戏剧性来解决这个问题:
exports.index = function(req, res) {
Region.find({}, function(err, docs) {
if(!err) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000');
res.json(200, { regions: docs });
} else {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000');
res.json(500, { message: err });
}
});
}
Run Code Online (Sandbox Code Playgroud)
该res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000');行是我添加的一行,用于告诉浏览器可以接受响应并停止打扰我;现在的问题是我必须将这个愚蠢的行添加到从任何地方发送的每个响应中,而且我确信我必须缺少某种方法来更改默认标头以Access-Control-Allow-Origin永远包含该条目。
在一个完美的世界中,我可以根据代码在什么环境中执行来打开和关闭它,但我完全满足于 app.js 中的一个代码块,我至少可以删除一次试图追踪 75 个res.setHeader. 我认为必须有一种方法可以改变.json隐藏res在其基础后面的方法,但是文档没有提供任何关于我如何做到这一点的见解,更不用说这是否是一个糟糕的主意。有什么想法吗?
编辑
我认为(正如建议的那样)配置应用程序级中间件是关键。这是我添加到 app.js 文件中的代码:
// allow CORS:
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000');
next();
});
Run Code Online (Sandbox Code Playgroud)
但是,这产生了与以前相同的错误(“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”)。
试试这个作为中间件:
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization');
next();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6948 次 |
| 最近记录: |