在heroku中没有express.static的子目录

我看到一些非常奇怪的行为,其中一些文件正确地由我的express / node服务器(使用express.static() )返回,而不是子目录中的文件。 令人沮丧的是,它在本地使用节点或工头工作正常,它不会在heroku上工作。 这个要点在这里有主要的文件,我的应用程序结构如下所示:

 -app - index.html - img/ - base.png - sub/ - sub.png - scripts - base.js - sub/ - sub.js - css - base.css - sub/ - sub.css - server - app.js 

index.html和base。*文件都加载正常,它只是404.的sub。*文件似乎奇怪express.static会去1级深,但不是2

我已经尝试了一些不同的configuration,包括这个stackoverflow答案 。 我必须错过简单的东西。 谢谢您的帮助。

更新:

当我console.log下面的服务器上启动heroku,我得到:

  • path.join(__dirname, '../app') /app path.join(__dirname, '../app') = /app
  • path.join(__dirname, '/../app') /app/app path.join(__dirname, '/../app') /app/app path.join(__dirname, '/../app') = /app/app
  • path.normalize(path.join(__dirname, '../app')) /app/app path.normalize(path.join(__dirname, '../app')) = /app/app
  • path.join(process.cwd(), '../app') /app/app path.join(process.cwd(), '../app') = /app/app

确保你的目录的子目录被添加到你的Git仓库中。

您可以使用heroku run 'ls ~'来帮助debugging问题(通过观察dyno上的文件)。

把绝对path并没有解决这个问题。 您的.gitignore可能会排除它。

尝试改变你的静态目录:

 app.use(express.static(path.join(__dirname, '/../app'), { maxAge: 86400000 })); 

要么

 app.use(express.static(path.normalize(path.join(__dirname, '../app')), { maxAge: 86400000 })); 

添加{{__dirname}}

<link href="{{__dirname}}/stylesheets/style.css" type="text/css" rel="stylesheet" media="screen,projection"/>

在layout.hbs或layout.jde中

我刚刚有同样的问题,我已经阅读了所有不同的答案,其中一些可能是重要的,但最终,这是我在静态内容开始服务之后所做的更改。

 CALENDARSPATH = path.join(process.env.PWD, 'calendars'); 

 -app.use(express.static(CALENDARSPATH, { maxAge: 86400000 })); +app.use('/calendars', express.static(CALENDARSPATH, { maxAge: 86400000 }));