Heroku错误 - 错误:无法在views目录中查找视图“index”

时间:2017-06-22 23:18:54

标签: heroku deployment webpack

当脱离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

enter image description here

2 个答案:

答案 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"