簡體   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