Pug和Parcel无法使用动态本地人

时间:2019-04-19 14:42:58

标签: node.js express pug parceljs

我有一个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'})为空。

我想知道我是否在这里遗漏了某些东西,或者它是否按预期工作?

1 个答案:

答案 0 :(得分:1)

我曾短暂试用过包裹。开箱即用的体验很棒,但是当涉及到高级配置时,那就太糟糕了。这是设计使然,包裹只是反对config的想法。一切都基于惯例。

因此,我检查了source code。原来,包裹仅从'.pugrc', '.pugrc.js', 'pug.config.js'中进行哈巴狗配置。

如果您选择坚持使用包裹方式,则可以尝试将locals值写回到磁盘上的这些文件之一。需要进行测试,可能会有一些异步问题需要调试。

我个人更喜欢以下方法。您将pug用作真正的模板引擎,直接使用pug.compile/render API来生成html。然后,您将这些html进一步传送到宗地,它仍将完成工作的“捆绑”部分。