【发布时间】:2014-06-19 20:34:46
【问题描述】:
我已经尝试了几件事,它们都可以在我的本地主机上工作(标题存在且正确),但不能在亚马逊托管的实时服务器上工作,该服务器是由 apache 反向代理后面的 bitnami NodeJS 图像构建的.
我尝试过的配置:
1) 为每个必要的路由手动设置响应标头(因此此代码在路由文件中):
router.options('/:var1/:var2', function(req, res) {
res.setHeader("Access-control-allow-origin", "*");
var db = req.db;
var data = db.get('data');
actions.find({"criteria":req.params.var1}, function(err, docs)
{
res.send(docs);
});
});
2) 使用 NPM 的中间件(此代码在 app.js 中):
//Includes/Requirements
var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongodb = require('mongodb');
var monk = require('monk');
var cors = require('cors');
var db = monk('localhost:27017/app');
...
app.use(cors());
因此,使用这两种技术对 localhost:3000 的请求会产生预期的标头 (Access-allow-control-origin:*)。但是,当我将代码推送到实时服务器时,响应中不存在这些标头。
有什么想法吗?
【问题讨论】:
-
这听起来像是您的 apache 反向代理没有从上游服务器转发所有标头的问题,而不是节点问题。
-
@furydevoid,感谢您的提示!我不敢相信这没有发生在我身上!我去了我的服务器并指定了正确的端口来绕过反向代理和presto:标题在那里。谢谢!
标签: javascript node.js express cors