Node.js Express提供index.html而不是静态文件

时间:2013-07-18 00:02:29

标签: node.js express assets

我用快速应用程序启动node.js,使用angular。在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文件是一样的!

编辑:这里有一张我的意思的小图片! enter image description here

当我查看任何文件的预览时,我得到enter image description here

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

问题的现场演示,点击that site

2 个答案:

答案 0 :(得分:4)

您能否详细说明您的静态文件' ?

在这一行:

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

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

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

http.createServer(app).listen()
你可以说:

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

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

答案 1 :(得分:1)

经过几个小时的研究后,我终于找到了它!

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

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

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

谢谢大家