4

我看到一些非常奇怪的行为,我的 express/node 服务器(使用express.static())正确地返回了我的一些文件,而不是子目录中的文件。令人沮丧的是,它在本地使用 node 或 foreman 可以正常工作,但它不能在 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.* 文件都加载正常,它只是 sub.* 文件 404。 express.static 会进入 1 级深,但不是 2 级似​​乎很奇怪

我尝试了许多不同的配置,包括这个stackoverflow answer。我必须缺少一些简单的东西。谢谢您的帮助。

更新:

当我在 heroku 上的服务器启动时 console.log 以下内容时,我得到:

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

4 回答 4

2

确保将目录的子目录添加到 Git 存储库。

您可以heroku run 'ls ~'用来帮助调试问题(通过观察测功机上的文件)。

放置绝对路径并没有为我解决问题。你.gitignore可能会排除它。

于 2017-08-03T06:02:03.793 回答
1

尝试将您的静态目录更改为:

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

或者

app.use(express.static(path.normalize(path.join(__dirname, '../app')), { maxAge: 86400000 }));
于 2013-10-11T07:53:51.170 回答
1

添加 {{__dirname}}

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

在你的 layout.hbs 或 layout.jde

于 2016-11-11T20:43:10.017 回答
0

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

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

...

-app.use(express.static(CALENDARSPATH, { maxAge: 86400000 }));
+app.use('/calendars', express.static(CALENDARSPATH, { maxAge: 86400000 }));
于 2014-08-01T00:52:40.840 回答