【问题标题】:Heroku Error - Error: Failed to lookup view "index" in views directoryHeroku 错误 - 错误:无法在视图目录中查找视图“索引”
【发布时间】:2017-06-22 23:18:53
【问题描述】:

我在部署到 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 模板从视图文件夹注入到 webpack 捆绑包。

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 启动脚本中,我运行 node ./src/build/bundle.js

【问题讨论】:

  • 哦,我刚刚注意到 Heroku 在我所有的路径中都添加了“应用程序”。你可以看到它是错误的。这是为什么呢?
  • 你找到答案了吗?我遇到了同样的问题

标签: heroku deployment webpack


【解决方案1】:

这是因为您的 __dirname 在 Heroku 中是如何定义的。如果你运行heroku run bash,然后运行pwd,你会看到你当前的工作目录是/app,所以/app被添加到你所有的路径前面。

尝试在 bash 中使用命令 ls 以查看是否列出了您的服务器文件夹,然后使用 cd server 命令查看 views 文件是否也存在。请注意,它区分大小写,因此很可能您已将其定义为大写。

另外,请注意,它会在您的 src\server/views 路径中添加一个 src\(使用反斜杠而不是正斜杠),这可能是由于您的 webpack.config.server.js 文件中的错误配置造成的。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,从 package.json "start": "node app.js" 更改脚本就足够了 到 "start": "nodemon app.js"

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2018-11-01
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多