首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js中视图子文件夹的pug呈现模板(速成)

Node.js中视图子文件夹的pug呈现模板(速成)
EN

Stack Overflow用户
提问于 2020-01-16 16:08:54
回答 2查看 2.6K关注 0票数 1

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

这是我的文件夹的结构,contacts.pug模板对于render()是不可见的

app.js

代码语言:javascript
复制
    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

代码语言:javascript
复制
    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

代码语言:javascript
复制
    extends views/layout

                    block content
                        h1 contacts

layout.pug

代码语言:javascript
复制
     html
        head
            title= title
           link(rel='stylesheet', href='/stylesheets/style.css')
        body
            include public/fragments/header
            block content

header.pug

代码语言:javascript
复制
    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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-17 12:26:06

我用这种方式解决了我的问题:

- app.js app.locals.basedir = path.join (__ dirname, 'views');**,中添加的将默认路径添加到视图文件夹中所需的子文件夹中。**

代码语言:javascript
复制
    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文件后向模板添加了正确的路径。

代码语言:javascript
复制
    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;

票数 1
EN

Stack Overflow用户

发布于 2020-06-18 21:14:09

老问题,但其他人可能有类似的问题,这是我的解决办法。

我建议您在与public文件夹相同的级别(而不是在其中)创建views目录。然后使用

代码语言:javascript
复制
app.set('view engine', 'pug');
app.set('views','./views');
app.use(express.static(path.join(__dirname, './public')));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59773656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档