繁体   English   中英

node.js,快速和不同端口

[英]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_sharinghttps://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM