Nodejs/Express: Error: Failed to lookup view "error" in views directory
Nodejs/Express: Error: Failed to lookup view "error" in views directory
我将我的 nodejs 模板引擎切换到 ejs(来自 jade)。当我 运行 我的 app.js 使用我的 ejs 模板时,我收到一系列 "Failed to lookup view 'error' in views" 日志。
其中一些包括:
GET /css/bootstrap.min.css 500 12.588 ms - 1390
Error: Failed to lookup view "error" in views directory
...
GET /css/clean-blog.min.css
Error: Failed to lookup view "error" in views directory
...
GET /js/bootstrap.min.js
Error: Failed to lookup view "error" in views directory
...
GET /js/jquery.js
Error: Failed to lookup view "error" in views directory
事实上,许多这些依赖项都包含在模板本身中(通过脚本标签包含)。让这些在 express 中工作的合适位置是什么?似乎 express 最终不应该在 views
文件夹中寻找这些(因为它们不是视图)。
确保您的 Express 应用程序具有此设置,对于当前的布局,这听起来像是您拥有的。
// Require static assets from public folder
app.use(express.static(path.join(__dirname, 'public')));
// Set 'views' directory for any views
// being rendered res.render()
app.set('views', path.join(__dirname, 'views'));
// Set view engine as EJS
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
将由 res.render()
渲染的视图放置在应用程序顶层的 'Views' 目录中是很正常的。 express-generator
实际上使用了该视图设置。您可以通过修改以下行来更改它
// replace with the directory path below ./
app.set('views', path.join(__dirname, 'views'));
Express 似乎找不到您的文件,所以您可怜的小服务器想要 return 一个错误,但是 views
目录中缺少您的错误文件。
在 views 目录中,您只需创建一个名为 error.jade 的文件。
然后您必须搜索 Express 搜索您的文件的位置。
我使用以下代码解决了我的问题。
// Require static assets from public folder
app.use(express.static(path.join(__dirname, 'public')));
// Set view engine as EJS
app.engine('ejs', require('ejs').renderFile);
app.set('view engine', 'ejs');
// Set 'views' directory for any views
// being rendered res.render()
app.set('views', path.join(__dirname, ''));
app.use('/form', express.static(__dirname + '/index.html'));
它对我有用,就我而言:
我需要从 ./views/payment.pug
中删除 ./views/
res.render('payment.pug', { title: 'Hey', message: 'Hello there!'});
这是不正确的:
res.render('./views/payment.pug', { title: 'Hey', message: 'Hello there!'});
^^^^^^
应该删除 ^^^^^^^^^ 和第一个样本一样
我通过添加以下内容修复了我的问题:
app.set('views', './src/views');
检查文件扩展名
就我而言,我使用 .js 而不是 .ejs
我的文件扩展名为 .js,我在我的视图目录中将其重命名为 .ejs,我已将其设置在 ./src/pages
我将我的 nodejs 模板引擎切换到 ejs(来自 jade)。当我 运行 我的 app.js 使用我的 ejs 模板时,我收到一系列 "Failed to lookup view 'error' in views" 日志。
其中一些包括:
GET /css/bootstrap.min.css 500 12.588 ms - 1390
Error: Failed to lookup view "error" in views directory
...
GET /css/clean-blog.min.css
Error: Failed to lookup view "error" in views directory
...
GET /js/bootstrap.min.js
Error: Failed to lookup view "error" in views directory
...
GET /js/jquery.js
Error: Failed to lookup view "error" in views directory
事实上,许多这些依赖项都包含在模板本身中(通过脚本标签包含)。让这些在 express 中工作的合适位置是什么?似乎 express 最终不应该在 views
文件夹中寻找这些(因为它们不是视图)。
确保您的 Express 应用程序具有此设置,对于当前的布局,这听起来像是您拥有的。
// Require static assets from public folder
app.use(express.static(path.join(__dirname, 'public')));
// Set 'views' directory for any views
// being rendered res.render()
app.set('views', path.join(__dirname, 'views'));
// Set view engine as EJS
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
将由 res.render()
渲染的视图放置在应用程序顶层的 'Views' 目录中是很正常的。 express-generator
实际上使用了该视图设置。您可以通过修改以下行来更改它
// replace with the directory path below ./
app.set('views', path.join(__dirname, 'views'));
Express 似乎找不到您的文件,所以您可怜的小服务器想要 return 一个错误,但是 views
目录中缺少您的错误文件。
在 views 目录中,您只需创建一个名为 error.jade 的文件。
然后您必须搜索 Express 搜索您的文件的位置。
我使用以下代码解决了我的问题。
// Require static assets from public folder
app.use(express.static(path.join(__dirname, 'public')));
// Set view engine as EJS
app.engine('ejs', require('ejs').renderFile);
app.set('view engine', 'ejs');
// Set 'views' directory for any views
// being rendered res.render()
app.set('views', path.join(__dirname, ''));
app.use('/form', express.static(__dirname + '/index.html'));
它对我有用,就我而言:
我需要从 ./views/payment.pug
中删除 ./views/res.render('payment.pug', { title: 'Hey', message: 'Hello there!'});
这是不正确的:
res.render('./views/payment.pug', { title: 'Hey', message: 'Hello there!'});
^^^^^^
应该删除 ^^^^^^^^^ 和第一个样本一样
我通过添加以下内容修复了我的问题:
app.set('views', './src/views');
检查文件扩展名 就我而言,我使用 .js 而不是 .ejs
我的文件扩展名为 .js,我在我的视图目录中将其重命名为 .ejs,我已将其设置在 ./src/pages