使用HTML部署Node.js时出现Heroku错误

时间:2014-06-15 03:01:10

标签: node.js heroku express

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。任何帮助表示赞赏。

2 个答案:

答案 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文件的所有文件,并使用正确的大小写敏感名称),您的问题将得到解决。