无法在视图目录“ / app / views”中查找视图“ home / index”

时间:2019-04-09 09:34:24

标签: node.js express heroku ejs

我正在尝试将项目发布到heroku,以使其在云中运行。在本地它可以在端口5000上工作,我可以获得每一个视图。当我将其上传到heroku时,尝试访问主页时出现以下错误:无法在视图目录“ / app / views”中查找视图“ home / index”

我已经尝试执行以下操作:

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs'); // set up ejs for templating

我也在互联网上寻找其他解决方案,但似乎没有什么可以解决我的问题。

我的路线如下:

  • views / home / index.ejs

查找文件的代码是:

        app.get('/', function (req, res) {
            res.render('home/index.ejs'); // load the index.ejs file
        });

预期输出是我的heroku可以正常工作,而无需进行大的更改,因此它既可以在heroku上运行,也可以在本地运行。目前,heroku正在回报上述错误。

3 个答案:

答案 0 :(得分:0)

您尝试过app-module-path吗?

const path = require('path');
require('app-module-path').addPath(path.join(__dirname, '../'));


I do not possess any experience with Heroku but the error seems to be related with a 
path problem like assuming there is a different directory level.
I would try to debug it on the render method and then go for a module solution.

例如

app.get('/', function (req, res) {
    res.render('../home/index.ejs'); // load the index.ejs file
}); 

答案 1 :(得分:0)

这是因为Heroku在home文件夹中找不到子文件夹views。这很可能是因为您可能已将文件夹写为“ Home”而不是“ home”。要找出答案,请执行heroku run bash,然后运行ls。这将列出/ app文件夹中的文件夹。进入工作目录后,您应该看到views文件夹。执行cd views,您将获得所有文件夹的列表。在此应该找到home文件夹。如果找到Views而不是views或根本没有Home而不是home,那么错误就出在这里,因为在heroku中,文件夹和文件路径是区分大小写(在本地不区分大小写,这就是为什么在本地主机端口5000中不会遇到相同的错误)。

在将文件夹和文件名固定为适当的大小写之后,请对Heroku进行一次推送,它应该可以工作。另外,还要小心进行测试,以查看它在heroku run bash中是否起作用,以及cd home是否起作用。如果不是这样,则需要删除home文件夹,将其推送到Heroku中,然后重新粘贴home文件夹并进行推送(由于缓存),然后它应该可以工作。

答案 2 :(得分:0)

请勿使用res.render(),而应使用res.sendFile()。如下所示

res.sendFile(path.join(__dirname+'/home/donnyllionaire/CRUD-app-Nodejs-Express-and-MongoDB/employee/addOrEdit.html'));

有关更多说明,请参见以下链接:https://github.com/donnillionaire/CRUD-app-Nodejs-Express-and-MongoDB/commit/11704d4572b7acc18b7289103b71282c58358d9a