【问题标题】:Page serving in development but not in Heroku production页面服务在开发中,但不在 Heroku 生产中
【发布时间】:2021-01-13 10:15:57
【问题描述】:

我的 nodejs/express 应用程序中有一个密码重置功能,如果用户忘记了,它会通过 Sendgrid 向用户发送一封电子邮件以输入新密码。

电子邮件包含一个按钮,单击该按钮可打开一个页面,该页面的 url 参数中有一个重置令牌。当我在本地运行应用程序时,此页面通过单击电子邮件按钮正确呈现,但在生产服务器上它返回错误,显然无法找到该页面。

日志如下所示:

ERROR {
2021-01-13T08:23:33.634102+00:00 app[web.1]:   view: View {
2021-01-13T08:23:33.634104+00:00 app[web.1]:     defaultEngine: 'pug',
2021-01-13T08:23:33.634104+00:00 app[web.1]:     ext: '.pug',
2021-01-13T08:23:33.634104+00:00 app[web.1]:     name: 'resetpassword',
2021-01-13T08:23:33.634105+00:00 app[web.1]:     root: '/app/views',
2021-01-13T08:23:33.634105+00:00 app[web.1]:     engine: [Function],
2021-01-13T08:23:33.634106+00:00 app[web.1]:     path: undefined
2021-01-13T08:23:33.634106+00:00 app[web.1]:   },
2021-01-13T08:23:33.634106+00:00 app[web.1]:   statusCode: 500,
2021-01-13T08:23:33.634107+00:00 app[web.1]:   status: 'error',
2021-01-13T08:23:33.634108+00:00 app[web.1]:   message: 'Failed to lookup view "resetpassword" in views directory "/app/views"'
2021-01-13T08:23:33.634108+00:00 app[web.1]: }

当代码相同时,我不确定它如何在开发中找到 html 模板,但在生产中却找不到。

路线如下:

router.get('/resetPassword/:token', controller.getResetPasswordForm)

exports.getResetPasswordForm = (req, res) => {
res.status(200).render('resetpassword', {
    title: 'Reset password',
    resetToken: req.params.token
})
}

我唯一能想到的是它与Heroku有关,并且模板相对于根目录,所以也许是“root:'/app/views”。我最近在应用程序中添加了一个新域名(所以它不仅仅是'....herokuapp.com')。

这是相对路径的问题吗?如果 Heroku 在我的开发服务器上工作,它是否有问题?

【问题讨论】:

  • 您可以添加路线详细信息以及提供值的路径吗?
  • 路径应该只是'.../views/resetPassword.pug'。
  • 在我看到您在主应用程序中提供服务的方式之前,我无能为力。如果您可以添加该代码,我可以知道哪里出了问题。
  • 对不起,我没有完全关注你 - 我的这个页面的路由只是应用程序的根,它向 url '/resetPassword/:token' 发出 GET 请求,它应该呈现文件在'/theapplication/views/resetPassword.pug'。在本地工作。我会尝试编辑发布代码,但它会有点乱......
  • 感觉您当前的工作目录可能没有正确映射。您可以尝试在主 js 文件中设置视图引擎的位置添加process.cwd() + '/views' 吗?

标签: node.js express heroku


【解决方案1】:

答案是 Heroku 必须关心大小写,因为 pug 模板称为“resetPassword”,而我让 nodejs 渲染了一个名为“resetpassword”的模板。这在本地显然是可以接受的,但对于 Heroku 的服务器来说却不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多