我正在使用AngularJS开发网站并在NodeJS(Express JS)Web服务中托管它。 AngularJS使用NodeJS服务的某些端点上的数据。换句话说,NodeJS具有为AngularJS网页提供服务并提供所需数据的端点。
在我的虚拟机(Web服务)上托管网页之前,我使用我的主机来托管它。然后网页尝试将数据请求到我的虚拟机的端点,它工作正常。
但是,当我在我的虚拟机(Web服务)上托管它并更改为在我的localhost(http://127.0.0.1:3000/data)上请求数据时,我现在收到GET http://127.0.0.1:3000/data net::ERR_CONNECTION_REFUSED
错误。
我尝试了什么
首先,我认为这是因为跨域资源共享而发生的,所以我通过添加这些代码行(取自this site)在我的NodeJS中启用它:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
然而,它仍然没有任何帮助。我仍然收到相同的错误消息。
后来,我认为可能是我的防火墙阻止了访问。然后我关闭了我的防火墙,它仍然无法解决我的问题。
我相信这是因为我的网页试图访问其localhost API上的端点,这应该在我第一次尝试时通过CORS处理来克服。
如果不是CORS,究竟是什么造成了这种情况?我该如何克服这个问题?任何帮助将不胜感激。
更新:节点JS路线代码
var express = require('express');
var app =express();
app.use(express.static(path.join(__dirname, 'public')));
app.get('/admin/login/:user/:pass', function(appReq,appRes){
appRes.status(200).send('1');
appRes.end();
});
app.get('/*', function(appReq, appRes){
fs.readFile('./public/index.html', function(err,data){
if (err) {
appRes.writeHead(500);
appRes.end('Error loading html');
}
else {
appRes.writeHead(200);
appRes.end(data);
}
});
});
app.listen(port, function(){
console.log('express app listening at http://'+hostname+":"+port+'/');
});
这是我的AngularJS GitHub repo
答案 0 :(得分:1)
原来使用localhost IP是错误的。这可能是由于JavaScript被发送到客户端,然后浏览器解释localhost是客户端的localhost。因此,将localhost更改为我的实际IP地址解决了我的问题。