【发布时间】: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 目录。有什么想法吗?