错误:ENOENT,在Heroku

时间:2015-07-20 22:33:54

标签: javascript node.js heroku

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

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

来自我服务器的get请求:

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”附加到我的路径上?

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

3 个答案:

答案 0 :(得分:2)

接受了。使用PWD代替__dirname的解决方案是完全错误的。与其他任何地方一样,sendFile在Heroku上运行:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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