首页 > 解决方案 > 如何通过 express 应用在视图中使用文件夹

问题描述

我的视图文件夹中有一个哈巴狗模板views/administration/assets/fixed-assets.pug

default.pugfixed-assets.pug扩展来自我的根视图文件夹。

当我尝试渲染fixed-assets.pug视图时,它会查找目录default.pug内部views/administration/assets/而不是视图目录本身

如果我把fixed-assets.pug它放在视图目录而不是views/administration/assets/目录中并相应地更新路由,一切都会正常工作。

如何告诉 express 在default.pugvi​​ews 目录和目录fixed-assets.pug中查找views/administration/assets/

这是我的路线

var express = require('express');
var secured = require('../lib/middleware/secured');
var router = express.Router();

/* GET fixed-assets page. */
router.get('/administration/fixed-assets', secured(), function(req, res, next) {
  res.render('administration/assets/fixed-assets', {
    title: 'Fixed Assets'
  });
});

module.exports = router;

这是我的views/administration/assets/fixed-assets.pug

extends default.pug

block scripts
  if !starter
    script(src='/js/main.js')

block view
  .animated.fadeIn
    h1 Fixed Assets

这是我得到的错误

ENOENT:没有这样的文件或目录,在 /usr/src/app/views/administration/assets/fixed-assets.pug 第 1 行打开“/usr/src/app/views/administration/assets/default.pug”

谢谢你的帮助!

标签: expresspug

解决方案


包含的文档中,它说:

如果路径是绝对路径(例如,包括 /root.pug),则通过添加 options.basedir 来解决。否则,将相对于正在编译的当前文件解析路径。

对此的解释在API Reference中:

basedir: string 所有绝对包含的根目录。

您可以在主 app.js/server.js 文件中像这样全局实现 basedir:

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.locals.basedir = path.join(__dirname, 'views');

推荐阅读