2015-05-13 64 views
4

我正在處理平均應用程序。使用節點的Mean-Cli packgae。 其中我使用darksky天氣API, 包名信息。我有4個其他軟件包在平均應用程序的自定義文件夾。 我是如何啓用CORS以便所有API請求都沒有失敗並返回響應的。如何在MEAN STACK web應用程序中啓用CORS?

我google了一下,發現我必須添加這個中間件。

//CORS middleware 
var allowCrossDomain = function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', 'example.com'); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type'); 
    next(); 
} 

我應該在哪裏添加這個。在我們使用跨域請求的每個包中或某個全局文件中。

我試圖添加這個中間件的服務器路由文件?信息包和confile中的express.js文件,但沒有奏效。

回答

1

因此,針對您的問題的實際解決方案竟然使用jsonp回調與forecast.io api,因爲它們沒有啓用CORS標頭進行客戶端訪問。使用$http.jsonp這樣

$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK'); 

一般來說,以使您的expressjs服務器上做CORS以下。

  1. 安裝快遞cors模塊npm install cors
  2. 需要它var cors = require('cors');
  3. app.use(cors());

cors模塊把它放在你的快遞應用程序實例會自動添加的響應相關的頭​​所有的AOR。或者你也可以配置很多選項。檢查official docs

OR

如果你想自己做,你可以做以下

var permitCrossDomainRequests = function(req, res, next) { 
res.header('Access-Control-Allow-Origin', '*'); 
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
res.header('Access-Control-Allow-Headers', 'Content-Type'); 
// some browsers send a pre-flight OPTIONS request to check if CORS is enabled so you have to also respond to that 
if ('OPTIONS' === req.method) { 
    res.send(200); 
} 
else { 
    next(); 
} 
}; 

然後打開你的CORS中間件

app.use(permitCrossDomainRequests); 

啓用路由
app.use(app.router); 
+0

試過這個,但在本地和aws都不工作 – ashishkumar148

+0

@ashish_pbh你在控制檯或chrome開發工具的網絡選項卡上出現什麼錯誤? – kachhalimbu

+0

錯誤是用於訪問預測io問題,而不是您自己的服務器。您的服務器上的啓用cors不會解決您的問題 – kachhalimbu

1

如果您只有一臺Express服務器,則只需添加一次中間件。您的其他模塊可能作爲中間件提供給服務器。

如果您註冊的中間件功能沒有任何限定路徑(如app.use(function(){ ... })),則中間件將針對服務器處理的每個請求運行。任何給定的請求都調用其他中間件並不重要。

如果您有多個Express服務器同時運行(這不太可能),那麼您需要將中間件添加到每個服務器。

相關問題