当所有模板都在视图文件夹中时,我们成功地呈现它们。我使文件夹和视图的结构,然后内部模板是不可见的呈现。
这是我的文件夹的结构,contacts.pug模板对于render()是不可见的

app.js
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const app = express();
// view engine setup
app.set('views', [path.join(__dirname, '/views'),
path.join(__dirname, '/views/public'),
path.join(__dirname, '/views/public/templates'),
path.join(__dirname, '/views/public/fragments')]);
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;index.js
const express = require('express');
const router = express.Router();
/* GET home page. */
router.get('/', (req, res, next) => {
res.render('index', {});
});
router.get('/about', (req, res, next) => {
res.render('about_us.pug');
});
router.get('/portfolio', (req, res, next) => {
res.render('portfolio');
});
router.get('/contacts', (req, res,next) => {
res.render('/public/templates/contacts',{});
});
router.get('/products', (req, res, next) => {
res.render('products.pug');
});
module.exports = router;contacts.pug
extends views/layout
block content
h1 contactslayout.pug
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
include public/fragments/header
block contentheader.pug
block header
link(rel='stylesheet', href='./stylesheets/public/fragments/header.css')
div
ul
li: a(href='/') Home
li: a(href='/about') About
li: a(href='/portfolio') Portfolio
li: a(href='/contacts') Contact
li: a(href='/products') Products误差
"C:\Users\Xiaomi\IdeaProjects\online_shop_server\views","C:\Users\Xiaomi\IdeaProjects\online_shop_server\views\public",视图目录中的
错误:查找视图“/public/模板/联系人”失败"C:\Users\Xiaomi\IdeaProjects\online_shop_server\views\public\templates“或"C:\Users\Xiaomi\IdeaProjects\online_shop_server\views\public\fragments”at Function.render (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\application.js:580:17) at ServerResponse.render (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\response.js:1008:7)在C:\Users\Xiaomi\IdeaProjects\online_shop_server\routes\index.js:18:7 at Layer.handle as handle_request next (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\route.js:112:3)在C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\index.js:281:22的Layer.handle as handle_request at Function.process_params (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\index.js:335:12) at next (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\( router\index.js:275:10)
发布于 2020-01-17 12:26:06
我用这种方式解决了我的问题:
- app.js app.locals.basedir = path.join (__ dirname, 'views');**,中添加的将默认路径添加到视图文件夹中所需的子文件夹中。**
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const app = express();
// view engine setup
app.set('views', [path.join(__dirname, '/views'),
path.join(__dirname, '/views/public'),
path.join(__dirname, '/views/public/templates'),
path.join(__dirname, '/views/public/fragments'),
path.join(__dirname, '/views/public/templates/layout')]);
app.set('view engine', 'pug');
app.locals.basedir = path.join(__dirname, 'views');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;-链接处理程序中的index.js 中的在更新视图文件夹中的文件夹结构和pug文件后向模板添加了正确的路径。
const express = require('express');
const router = express.Router();
/* GET home page. */
router.get('/', (req, res, next) => {
res.render('index', {});
});
router.get('/about', (req, res, next) => {
res.render('about_us',{});
});
router.get('/portfolio', (req, res, next) => {
res.render('portfolio',{});
});
router.get('/contacts', (req, res,next) => {
res.render('contacts',{});
});
router.get('/products', (req, res, next) => {
res.render('products',{});
});
module.exports = router;

发布于 2020-06-18 21:14:09
老问题,但其他人可能有类似的问题,这是我的解决办法。
我建议您在与public文件夹相同的级别(而不是在其中)创建views目录。然后使用
app.set('view engine', 'pug');
app.set('views','./views');
app.use(express.static(path.join(__dirname, './public')));https://stackoverflow.com/questions/59773656
复制相似问题