2

我使用 angular 启动了一个带有 express 应用程序的 node.js。在 cloud9 上创建应用程序时一切正常。

我刚刚在我的 ec2 实例上发布了应用程序,现在节点总是提供 index.html 而不是我的静态文件...当我查看 chrome 调试网络时,我看到所有 js 文件都已加载(状态 200)但是当我预览它们时,它我的 index.html 文件... 我的 js 文件的类型也设置为 text/html...

这是我的小 server.js(没有路由,因为我伪造了我的角度数据,所以暂时不调用服务器......)

var express = require('express'),
path = require('path'),
http = require('http'),
fs = require('fs');

var app = express();

var logFile = fs.createWriteStream('./logger/express.log', {flags: 'a'}); //use {flags: 'w'} to open in write mode

app.configure(function () {
    app.set('port', process.env.PORT || 3000);
    app.use(express.logger({stream: logFile}));
    app.use(express.bodyParser()),
    app.use(express.static(path.join(__dirname, 'public')));
});

 /*app.get('/events', eventRoute.getEvents);
app.post('/events', eventRoute.saveEvent);*/

http.createServer(app).listen(app.get('port'), function () {
    console.log("Express server listening on port " + app.get('port'));
});

正如我之前所说,cloud9 上一切正常(暂时无法在本地尝试......)。

有没有人知道出了什么问题?

谢谢

多米尼克

PS:我忘了说我的CSS文件也是一样的!

编辑:这是我的意思的小图片! 在此处输入图像描述

当我查看我得到的任何文件的预览时在此处输入图像描述

Edit2:我刚刚删除了所有文件并再次上传。同样的问题!我真的需要这方面的帮助!

现场演示问题,点击该站点

4

2 回答 2

4

你能详细说明你的“静态文件”是什么意思吗?

在这条线上:

app.use(express.static(path.join(__dirname, 'public')));

您已快速路由以将“公共”目录中的所有文件作为静态文件提供。默认情况下,如果调用该目录, express.static 将提供“index.html”。由于您将“公共”目录提供给“/”,因此它正在提供 index.html。

编辑:我不确定这是否是问题,但这部分代码是多余的:

http.createServer(app).listen()

你可以说:

app.listen([port], [callback]);

因为调用 express() 创建了一个服务器。希望有帮助。

于 2013-07-18T00:28:02.520 回答
1

好吧,在研究了几个小时可能导致它的原因后,我终于找到了!

问题根本与代码无关!我正在访问一个新的 ec2 实例,但我没有将端口 80 路由到我的 node.js 应用程序(81**)。

我基本上只是运行了这个命令,一切都开始正常工作了。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 81**

谢谢大家

于 2013-07-18T20:38:44.970 回答