【发布时间】:2020-01-16 16:08:54
【问题描述】:
当所有模板都在视图文件夹中时,我们就成功地渲染了它们。我制作了文件夹和视图的结构,然后内部模板对渲染不可见。
这是我的文件夹结构,contacts.pugtemplate 对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 contacts
layout.pug
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
include public/fragments/header
block content
header.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/templates/contacts” ", "C:\Users\Xiaomi\IdeaProjects\online_shop_server\views\public\templates" 或 "C:\Users\Xiaomi\IdeaProjects\online_shop_server\views\public\fragments" 在 Function.render (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\application.js:580:17) 在 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 在 Layer.handle [as handle_request] (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\layer.js:95:5) 在下一个(C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\layer.js:95:5) 在 C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\index.js:335:12) 在下一个(C:\Users\Xiaomi\IdeaProjects\online_shop_server\node_modules\express\lib\router\index.js:275:10)
【问题讨论】:
-
我解决了将
app.locals.basedir = path.join(__dirname, 'views');添加到app.js的问题 -
如果已解决,请将下面的解决方案作为答案发布并接受,以帮助未来的访问者。
标签: javascript