当脱离Heroku时,我不断收到此错误。构建过程是成功的,但后来我得到了这个错误。无法弄清楚是什么问题,不应该路径是src / server / views?一切都在当地工作。
Error: Failed to lookup view "index" in views directory "src\server/views"
[web.1]:at /app/node_modules/express/lib/router/index.js:281:22
app[web.1]:at param (/app/node_modules/express/lib/router/index.js:354:14)
app[web.1]:at Function.render(/app/node_modules/express/lib/application.js:580:17)
app[web.1]:at param (/app/node_modules/express/lib/router/index.js:365:14)
app[web.1]:at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
app[web.1]:at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
我使用webpack tu捆绑我的服务器端代码,并使用html-webpack-plugin将我的index.ejs模板从views文件夹注入到webpack bundle。
webpack.config.server.js
module.exports = {
devtool: 'source-map',
performance: {
hints: false
},
target: 'node',
node: {
__dirname: true,
__filename: true
},
entry: {
bundle: './src/server/prodServer.js'
},
output: {
path: path.join(buildPath, 'build'),
filename: '[name].js'
}
...
plugins: [
new HtmlWebpackPlugin({
template: 'ejs-loader!./src/server/views/index.ejs'
})
]
prodServer.js
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, 'views'))
文件夹结构
正如您所看到的,我在views文件夹中有index.ejs。 prodServer是我的服务器文件,在webpack构建之后我获得了bundle文件和index.html。
在Heroku启动脚本中,我运行节点./src/build/bundle.js
答案 0 :(得分:0)
这是因为在Heroku中如何定义__dirname。如果您先运行heroku run bash
,然后再运行pwd
,则会看到当前的工作目录为/app
,因此为什么在所有路径前都添加了/app
。
尝试使用bash中的命令ls
来查看服务器文件夹是否已列出,然后使用cd server
命令来查看views
文件是否也在那里。请注意,它区分大小写,因此很可能已将其定义为大写。
此外,请注意,它向您的src\
路径添加了src\server/views
(带有反斜杠而不是正斜杠),这可能是由于webpack.config.server.js
文件中的配置错误所致。
答案 1 :(得分:0)
我遇到了同样的问题,从 package.json "start": "node app.js"
更改脚本就足够了
到
"start": "nodemon app.js"