Node.js 查找视图失败";主页/索引“;“在视图目录中”/应用程序/视图“;

Node.js 查找视图失败";主页/索引“;“在视图目录中”/应用程序/视图“;,node.js,express,heroku,ejs,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 我也在互联网上寻找其他解决方案

我正试图将我的项目发布到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正在返回上述错误。

您是否尝试过应用程序模块路径

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
}); 

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

将文件夹和文件名固定到适当的大小写后,在Heroku上进行推送,应该可以正常工作。还要小心再次测试,看看在
heroku运行bash时它是否工作,以及
cd home是否工作。如果没有,那么您需要删除
home
文件夹,将其推入Heroku,然后重新粘贴
home
文件夹并执行推送操作(因为缓存),然后它就会工作。

不要使用
res.render()
,而是使用
res.sendFile()
。。如下图所示

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

有关更多说明,请参阅此链接:

与我遇到的错误相同的问题。你能找到答案吗?