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');});
}
顯然是不能被使用的通配符。任何人都可以闡明發生了什麼?
我複製了你的服務器代碼,除了定義變量'json'外,沒有任何問題。當我使用jQuery來提出請求時,Chrome和FF中一切正常。你使用什麼庫在前端發起http請求? – Ryan
@Ryan我只是用http.get使用NodeJS庫。上面顯示了提出請求的確切代碼。 – ddkle
您正在瀏覽器中使用NodeJS庫嗎? – Ryan