【问题标题】:Heroku error when deploying Node.js with HTML使用 HTML 部署 Node.js 时出现 Heroku 错误
【发布时间】:2014-06-15 03:01:10
【问题描述】:

Node.js 和 Heroku 的新手,最近设置并使用基本的 hello world,但现在我试图让 Node.js 显示 HTML 文件,但遇到了问题。这是我的单个 JS 文件:

web.js

var express = require('express');
var app = express();

app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

app.get('/', function(req, res) {
    res.render('about.html');
});

var port = Number(process.env.PORT || 5000);
app.listen(port, function() {
    console.log("Listening on " + port);
});

我的 HTML 文件位于“/views”中,仅显示基本文本/标题,并且在运行“node web.js”时工作正常。但是,当上传到 Heroku 并访问我的网站时,我收到以下错误:

错误:无法在视图目录中查找视图“about.html” Function.app.render 中的“/app/views” (/app/node_modules/express/lib/application.js:508:17) 在 ServerResponse.res.render (/app/node_modules/express/lib/response.js:782:7) 在 Object.handle (/app/web.js:9:6) 在 next_layer (/app/node_modules/express/lib/router/route.js:103:13) 在 Route.dispatch (/app/node_modules/express/lib/router/route.js:107:5) 在 /app/node_modules/express/lib/router/index.js:213:24 在 Function.proto.process_params (/app/node_modules/express/lib/router/index.js:284:12) 在下一个 (/app/node_modules/express/lib/router/index.js:207:19) 在 Layer.expressInit [作为句柄] (/app/node_modules/express/lib/middleware/init.js:23:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:252:17)

我对它说“/apps/views”感到困惑,与最初的错误一样,该目录被命名为“/Views”,但我更改了它以查看它是否有帮助,但无济于事。我没有 /apps 目录,这是他们做的吗?

无论如何,只想在 Heroku 上使用 Node.js 从子文件夹中显示一些简单的 HTML。任何帮助表示赞赏。

【问题讨论】:

  • 您的package.json 正确吗?要进行测试,请尝试在不同的机器/环境上拉动 git repo(或移动除node_modules 文件夹之外的所有文件)并运行npm install,然后运行node web.js
  • 测试了两次,可以在两种不同的环境中使用。问题似乎出在 Heroku 的服务器端,还有其他想法吗?
  • 您是否按照开发中心的指南进行 procfile 设置?他们有相当具体的要求,任何变化都可能导致这种行为。
  • 我的 procfile 有一行,“web: npm install & node web.js”,不确定是否需要更多,但一切都在本地工作。它正在查看静态目录中的内容,但根本找不到 /views 目录。有什么想法吗?

标签: node.js heroku express


【解决方案1】:

这可能是一个非常晚的答案,但是您将 /Views 更改为 /views 是正确的,因为 Heroku 中的文件路径确实区分大小写,这与您的本地环境不同(因此为什么它在您进行本地运行时有效)。唯一的问题是由于缓存没有正确推送到 Heroku。所以你应该做/做的是必须/删除文件,在 Heroku 中没有它的情况下推送一次,所以它会记下文件更改,然后用正确的视图重做另一个推送 /views 包括。

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

因此,当您在 bash 中执行 ls 时,您应该对您的文件夹 /app 执行 cd 并在其中查看 /views,然后再使用另一个 cd/views 检查以查看 @ 987654336@ 在该文件夹内。如果不是,那么您没有正确执行推送,这就是您遇到错误的原因。但是,如果您正确推送(例如,通过推送所有没有/views 文件夹或about.html 文件的文件,并使用正确区分大小写的名称,您的问题将得到解决。

【讨论】:

  • 嘿谢谢!!!,删除视图文件夹,然后再次添加工作!!!。这个答案救了我的命。
  • 我的荣幸。很高兴听到@SudheerTripathi :)
【解决方案2】:

在异常堆栈中它说错误在 /app/web.js 中,所以我会说应用程序目录是存储所有文件的 heroku 上的根目录,而不是存储视图的目录会有意义。你能确认html文件确实上传到heroku吗?

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2021-10-29
    • 2020-04-20
    • 2017-12-18
    • 2014-11-09
    • 2016-01-05
    相关资源
    最近更新 更多