我有一个Express应用程序,该应用程序使用Pug模板和用于打包程序的Parcel。根据包裹docs,我可以有一个配置文件来存储我的本地人pug.config.js
,但是,我需要在运行时将本地人动态添加到模板中。可以这样做吗?
这是我的文件:
index.pug
...
h1 #{isAuthenticated}
h1 #{env}
...
pug.config.js
module.exports = {
locals: {
env: process.env.NODE_ENV
}
}
app.js
const Bundler = require('parcel-bundler')
const bundler = new Bundler(path.resolve(__dirname, 'views/index.pug'))
app
.set('views', path.join(__dirname, 'views'))
.set('view engine', 'pug')
.use(function(req, res, next) {
res.locals.isAuthenticated = 'true'
next()
})
.use(bundler.middleware())
这里我尝试将本地变量isAuthenticated
设置为'true'
,但是在渲染index.pug
变量为空时,同时,我的{{ 1}}文件存在。
现在,如果我尝试使用env
在控制器函数中呈现页面,则变量pug.config.js
现在存在,但是res.render('index', {isAuthenticated: 'true'})
为空。
我想知道我是否在这里遗漏了某些东西,或者它是否按预期工作?
答案 0 :(得分:1)
我曾短暂试用过包裹。开箱即用的体验很棒,但是当涉及到高级配置时,那就太糟糕了。这是设计使然,包裹只是反对config的想法。一切都基于惯例。
因此,我检查了source code。原来,包裹仅从'.pugrc', '.pugrc.js', 'pug.config.js'
中进行哈巴狗配置。
如果您选择坚持使用包裹方式,则可以尝试将locals
值写回到磁盘上的这些文件之一。需要进行测试,可能会有一些异步问题需要调试。
我个人更喜欢以下方法。您将pug用作真正的模板引擎,直接使用pug.compile/render
API来生成html。然后,您将这些html进一步传送到宗地,它仍将完成工作的“捆绑”部分。