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中并上传应用程序。
答案 0 :(得分:2)
我猜测问题在于你如何指定静态文件的目录。
我通常看到的 - 并且更喜欢 - 以这种方式设置静态:
app.use(express.static(__dirname + '/public'));
这意味着Express将在您的应用程序文件所在的相同目录的public
子目录中查找静态文件。让我们假设您有两个应用程序,{ {1}}和app1.js
。 app2.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是如何启动/重启应用程序的,但我猜测它并不是从您期望的目录中进行的。