Express - 无法查找视图
Posted
技术标签:
【中文标题】Express - 无法查找视图【英文标题】:Express - cannot lookup view 【发布时间】:2021-08-15 16:50:56 【问题描述】:我咨询了许多其他类似的主题。我一直没能找到答案。
./
config/
connection.js
controllers/
homeRoutes.js
index.js
db/
schema.db
models/
index.js
User.js
public/
css/
styles.css
views/
layouts/
main.handlebars
server.js
这是homeRoutes.js
的样子:
const router = require('express').Router();
const User, BlogPost, Comment = require('../models');
//TEST - render homepage
router.get('/test', async (req, res) =>
try
res.render('main');
catch (err)
res.status(500).json(err);
);
这是 server.js 所具有的(我认为问题出在此处):
// DEPENDENCIES
const express = require('express');
const sequelize = require('./config/connection');
const routes = require('./controllers');
const exphbs = require('express-handlebars');
const path = require('path');
// HANDLEBARS configuration
// set up Handlebars.js engine
const hbs = exphbs.create();
// EXPRESS CONFIGURATION
// tells node that we are creating an express server
const app = express();
// sets an initial port.
const PORT = process.env.PORT || 9999;
// inform Express.js on which template engine to use
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
// Sets up express app to handle data parsing
app.use(express.urlencoded( extended: true ));
app.use(express.json());
app.use(express.static(path.join(__dirname, 'public')));
app.use(require('./controllers/homeRoutes'));
// tells app what routes to use
app.use(routes);
// Logging DB info
console.log(`Database name: $sequelize.config.database \n running on port:
$sequelize.config.port \n under hostname: $sequelize.config.host`)
// Listener. Ths effectively 'starts' our server
app.listen(PORT, () =>
console.log(`Node Server running on port: $PORT`);
)
当我运行服务器并转到我的路由 localhost:9999/test 时,我收到以下错误:
Error: Failed to lookup view "main" in views directory "/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/views"
at Function.render (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/application.js:580:17)
at ServerResponse.render (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/response.js:1012:7)
at /Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/controllers/homeRoutes.js:8:13
at Layer.handle [as handle_request] (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/layer.js:95:5)
at /Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/index.js:335:12)
at next (/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/node_modules/express/lib/router/index.js:275:10)
如果我将main.handlebars
上移一级到views 目录,我会收到以下错误:
Error: ENOENT: no such file or directory, open '/Users/ep9k/Desktop/Coding Bootcamp/Week14/ur-rich-fsf-pt-02-2021-u-c/Bootcamp14_TechBlog/views/layouts/main.handlebars'
如果有帮助,这里是github repo:https://github.com/epurpur/Bootcamp14_TechBlog
【问题讨论】:
从错误来看,您似乎需要views/
中的main.handlebars
,这是您的控制器在执行res.render('main')
时引用的视图并且 您需要main.handlebars
在 views/layouts/
中,因为视图引擎正在那里寻找布局。
这些答案解决了你的问题吗?
【参考方案1】:
我认为您应该在这里查看reference。您忘记在views
文件夹中添加文件。在 homeRoutes.js
中,您将其称为 main
(我谦虚地认为这很令人困惑……在您的参考示例中 home
)。因此,如果您创建此文件,则此代码将毫无问题地运行!
【讨论】:
以上是关于Express - 无法查找视图的主要内容,如果未能解决你的问题,请参考以下文章
节点无法在 Express/react 应用程序中查找视图“错误”
Nodejs / Express:错误:无法在视图目录中查找视图“错误”
无法读取未定义的属性“名称” - mongoose、express、nodeJS、ejs
node框架express里面静态文件中间件express.static,根据路径名查找文件