我在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”附加到我的路径上?
所有路径在本地服务器上都能正常运行。谢谢!
答案 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`),