NODEJS和HER​​OKU:部署服务器后,我无法提供静态文件

时间:2014-12-06 19:43:54

标签: javascript css node.js heroku static-files

好的,我有一个简单的服务器,它有以下设置:

var port = process.env.PORT || 8080;

var server = http.createServer(app).listen(port);

process.env.PWD = process.cwd();

app.use(express.static(process.env.PWD+'/Public'));

app.get('/',function(req,res) {

  res.sendfile(process.env.PWD+ '/index.html');
  res.end;

});

我在文件夹中创建一个git并成功将其推送到heroku,但是当我打开它时我得到了这个结果:

https://leoforio.herokuapp.com/

如果您打开控制台日志,您将看到无法加载无法找到的css和js静态文件,但是当我在本地测试我的应用程序时,此设置有效并且文件按计划提供。 / p>

我做错了什么?

P.S。我不认为这是heroku的问题,我相信问题出在nodejs中并上传应用程序。

1 个答案:

答案 0 :(得分:2)

我猜测问题在于你如何指定静态文件的目录。

我通常看到的 - 并且更喜欢 - 以这种方式设置静态:

app.use(express.static(__dirname + '/public'));

这意味着Express将在您的应用程序文件所在的相同目录的public子目录中查找静态文件。让我们假设您有两个应用程序,{ {1}}和app1.jsapp2.js使用app1.js(当前工作目录)按照您的方式进行配置,process.cwd()使用app2.js作为基础。这两个应用都位于__dirname

如果这样做,两者都能正常工作:

/home/drizo/app

但是,如果你这样做:

cd /home/drizo/app
node app1.js              # uses cwd + /public = /home/drizo/app/public
node app2.js              # uses __dirname + /public = /home/drizo/app/public

如您所见,cd /home/drizo # or ANY directory that's not /home/drizo/app node app/app1.js # uses cwd + /public = /home/drizo/public - WRONG node app/app2.js # uses __dirname + /public = /home/drizo/app/public 正在使用应用启动的目录。我不确定Heroku是如何启动/重启应用程序的,但我猜测它并不是从您期望的目录中进行的。

相关问题