【问题标题】:Error: ENOENT, stat '/app/public/views/index.html' in Heroku错误:ENOENT,Heroku 中的 stat '/app/public/views/index.html'
【发布时间】:2015-10-10 05:21:04
【问题描述】:

我在 Heroku 应用上提供静态视图时出错。奇怪的是,Heroku 似乎将“app”附加到我的静态文件路径的前面,我不知道为什么。路径应该是“public/views/index.html”。

我最近尝试了 Stack 提出的这个解决方案,但它似乎不起作用:Node.js, can't open files. Error: ENOENT, stat './path/to/file'

来自我的服务器的获取请求:

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

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/public/views/index.html');
});

// profile page
app.get('/profile', function (req, res) {
  // check for current (logged-in) user
  req.currentUser(function (err, user) {
    // show profile if logged-in user
    if (user) {
      res.sendFile(__dirname + '/public/views/profile.html');
    // redirect if no user logged in
    } else {
      res.redirect('/');
    }
  });
});

有人知道为什么 Heroku 会在我的路径中附加“app”吗?

所有路径在本地服务器上都能正常工作。谢谢!

【问题讨论】:

    标签: javascript node.js heroku


    【解决方案1】:

    看起来这有一段时间没有更新了,但是我遇到了同样的 Heroku 根目录混乱,但是当我将代码更改为使用“路径”而不是 __dirname 时,它​​起作用了。

    path.join(__dirname, '..', 'views', 'email', `${template}.pug`),
    

    【讨论】:

      【解决方案2】:

      接受。这里使用PWD 而不是__dirname 的解决方案是完全错误的。 sendFile 在 Heroku 上的工作方式与在其他任何地方的工作方式相同:

      res.sendFile(path.join(__dirname, 'public', 'views', 'index.html'));
      

      【讨论】:

        【解决方案3】:

        这是因为 Heroku 中的全局 __dirname 变量设置为 /app。使用process.env.PWD 而不是__dirname

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-08
          • 1970-01-01
          • 2021-09-22
          • 1970-01-01
          • 1970-01-01
          • 2017-01-24
          • 2021-04-26
          • 2021-04-04
          相关资源
          最近更新 更多