在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 }));