2015-08-21 46 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节点模块,它最终解决了问题。

相关问题