[英]node.js, express and different ports
我一直在使用node.js,然后遇到了快速框架。 当使用不同的端口时,我似乎无法使其正常工作。
我在http:// localhost:8888上安装了ajax,这是我在Mac上运行的MAMP服务器。
$.ajax({
url: "http://localhost:1337/",
type: "GET",
dataType: "json",
data: { },
contentType: "application/json",
cache: false,
timeout: 5000,
success: function(data) {
alert(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error ' + textStatus + " " + errorThrown);
}
});
如您所见,我的node.js服务器正在http:// localhost:1337 /上运行 。 结果什么也没有得到返回,并且引发了错误。
有没有解决的办法?
谢谢
本
您遇到的问题是您试图发出跨域请求,并且浏览器不允许这样做(是的,为此目的,具有不同端口的相同主机名将计为不同的源)。 您在这里有三个选择:
1.代理请求。
如果可以,请执行此操作。 编写在:8888服务器上运行的代码,以将请求代理到1337服务器。 您也可以通过在它们两个前面都放置一个代理来做到这一点,像Nginx这样的东西非常擅长并且易于设置
2.使用CORS(跨源资源共享)
请参阅: http : //en.wikipedia.org/wiki/Cross-origin_resource_sharing和https://developer.mozilla.org/en/http_access_control
这意味着在响应中添加一些标头,以告知浏览器此处的跨域请求是可以的。 在您的Express服务器中,添加中间件,如下所示:
function enableCORSMiddleware (req,res,next) {
// You could use * instead of the url below to allow any origin,
// but be careful, you're opening yourself up to all sorts of things!
res.setHeader('Access-Control-Allow-Origin', "http://localhost:8888");
next()
}
server.use(enableCORSMiddleware);
3.使用JSONP
这是将“ AJAX”响应编码为Javascript代码的技巧。 然后,您要求浏览器加载该代码,浏览器将很高兴地跨源加载脚本,从而解决了跨源问题。 它还可以让其他人也绕过它,因此请确保这就是您想要的!
在服务器端,您需要将响应包装在Javascript函数调用中,如果启用了“ jsonp callback”选项,express可以自动执行此操作:
server.enable("jsonp callback");
然后使用响应的“ json()”方法发送响应:
server.get("/ajax", function(req, res) {
res.json({foo: "bar"});
});
在客户端,只需在dataType选项中将“ json”更改为“ jsonp”,即可启用jQuery中的JSONP:
dataType: "jsonp",
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.