2015-08-21 66 views
1

我在端口8080上創建了一個ExpressJS服務器,它將接收來自另一個運行在端口8889上的webapp的請求。我設置了合適的頭文件,但瀏覽器控制檯仍給我以下內容:ExpressJS服務器沒有設置正確的頭文件

XMLHttpRequest無法加載http://localhost:8080/。當憑證標誌爲真時,'Access-Control-Allow-Origin'標頭中不能使用通配符'*'。原因'http://localhost:8889'因此不被允許訪問。

服務器的代碼在這裏寫:

var express = require('express'); 
var app = express(); 

app.set('port', 8080); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin","http://localhost:8889"); 
    res.header("Access-Control-Allow-Credentials", true); 
    res.header("Content-Type", "application/json"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

app.get('/', function (req, res) { 
    res.send(JSON.stringify(json)); 
}); 

var server = app.listen(app.get('port'), function() { 
    var host = 'localhost'; 
    var port = '8080'; 
    console.log('Server listening at http://%s:%s', host, port); 
}); 

該請求的代碼是在這裏:

function getJSON(callback){ 
     return http.get({ 
       host: 'localhost', 
       port: 8080, 
     }, function (response){ 
       var body = ''; 
       response.on('data', function (d) { 
         body += d; 
       }); 
       response.on('end', function(){ 
        callback(JSON.parse(body)); 
      }); 
    }).on('error', function (err){console.log('couldnt get credentials');}); 
} 

顯然是不能被使用的通配符。任何人都可以闡明發生了什麼?

+0

我複製了你的服務器代碼,除了定義變量'json'外,沒有任何問題。當我使用jQuery來提出請求時,Chrome和FF中一切正常。你使用什麼庫在前端發起http請求? – Ryan

+0

@Ryan我只是用http.get使用NodeJS庫。上面顯示了提出請求的確切代碼。 – ddkle

+0

您正在瀏覽器中使用NodeJS庫嗎? – Ryan

回答

0

我剛剛結束了使用發現here的CORS節點模塊,它最終解決了問題。

相關問題