Node.js和Heroku的新手,最近设置并使用了一个基本的hello世界,但现在我试图让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',只显示基本文本/标题,并在运行节点web.js'时运行FINE。但是,当上传到Heroku并访问我的网站时,我收到以下错误:
错误:无法查找视图" about.html"在views目录中 " /应用/视图"在Function.app.render (/app/node_modules/express/lib/application.js:508:17)at 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)at at Route.dispatch(/app/node_modules/express/lib/router/route.js:107:5) 在/app/node_modules/express/lib/router/index.js:213:24 at Function.proto.process_params (/app/node_modules/express/lib/router/index.js:284:12)下一步 (/app/node_modules/express/lib/router/index.js:207:19)at at 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。任何帮助表示赞赏。
答案 0 :(得分:0)
在异常堆栈中它说错误在/app/web.js中,所以我会说应用程序目录是heroku上存储所有文件的根目录,而不是存储视图的目录会有意义的。你能否确认html文件确实上传到heroku?
答案 1 :(得分:0)
这可能是一个非常晚的答案,但是您将/Views
更改为/views
的方向是正确的,因为Heroku中的文件路径确实区分大小写,而在本地环境(因此在进行本地跑步时为什么会起作用)。唯一的事情是由于缓存而没有正确地推入Heroku。因此,您必须做的/必须删除的文件,在Heroku中不带文件的情况下推送一次,这样它就可以记录文件的更改,然后使用正确的视图/views
重做另一个推送。
类似地,您的__dirname
在Heroku中用/app
定义。如果您先运行heroku run bash
,然后再运行pwd
,则会看到当前的工作目录为/app
,因此为什么在所有路径前都添加了/app
。
因此,在bash中执行ls
时,应对文件夹cd
进行/app
,在文件夹中看到/views
,然后再添加另一个cd
/views
检查about.html
是否在该文件夹中。如果不是,则说明您没有正确执行推送,这就是您出错的原因。但是,如果您正确推送(例如,通过推送不带/views
文件夹或about.html
文件的所有文件,并使用正确的大小写敏感名称),您的问题将得到解决。