繁体   English   中英

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

[英]NODEJS and HEROKU : I can't serve the static files once the server is deployed

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

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静态文件,尽管当我在本地测试我的应用程序时,此设置有效,并且文件已按计划提供。

我究竟做错了什么?

PS:我认为heroku没问题,我相信问题出在nodejs并上传了应用程序。

我将猜测问题出在如何为静态文件指定目录。

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

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

这意味着Express将寻求在静态文件public你的应用程序文件在同一目录下子目录中。让我们想象一下,你有两个应用程序, app1.jsapp2.js 使用process.cwd() (当前工作目录)以您的方式配置app1.js ,而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

如您所见, app1.js使用的是应用程序的启动目录。 我不确定Heroku如何启动/重新启动应用程序,但是我猜它不是从您期望的目录中启动的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM