【发布时间】:2017-05-12 02:43:22
【问题描述】:
我正在使用 AngularJS 开发网站并将其托管在 NodeJS (Express JS) 网络服务中。 AngularJS 使用 NodeJS 服务的一些端点上的数据。换句话说,NodeJS 具有服务于 AngularJS 网页并提供所需数据的端点。
在我的虚拟机(Web 服务)上托管网页之前,我使用我的主机来托管它。然后该网页尝试向我的虚拟机端点请求数据并且它工作正常。
但是,当我将它托管在我的虚拟机(Web 服务)上并更改为在我的本地主机(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,究竟是什么导致了这种情况?我该如何克服这个问题?任何帮助将不胜感激。
更新:Node 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
【问题讨论】:
-
您能否将代码分享到 GitHub 或类似网站上,我们可以在那里查看。上面提到的代码不足以分析您要提供的服务以及您要如何提供服务。
-
@Jeet 当然,我会将我的 Angular 上传到 github 并在此处更新我的节点 js 路由代码,因为我的节点 js 文件很大。
-
如果您想确认问题是由于核心在您的浏览器中安装此扩展程序chrome.google.com/webstore/detail/allow-control-allow-origi/… 所以如果您想以快递方式为您的角度项目提供服务,这将允许 cors 和第二件事,您需要首先让它像“ng build --production”一样构建。你会得到“dist”文件夹。将该文件夹放在快速公共文件中或将这些文件作为静态资源提供。如果您共享您的服务器文件,它将帮助我向您展示确切的解决方案。
-
// 从根路径提供角度前端文件 app.use('/', express.static('dist', { redirect: false })); // 将虚拟 url 重写为 Angular 应用程序以启用内部页面的刷新 app.get('*', function (req, res, next) { res.sendFile(path.resolve('dist/index.html')); } ); app.listen(3000,function(req,res)
-
天哪,只是在 url 中提到了端口
标签: javascript node.js angularjs express