Express:在每个处理程序中部分渲染?

Express: Render partially in each handler?

我有一个使用 Express 和 Pug 的小网站。每个页面都有一个导航栏,其中包含从 user 参数中提取的用户名,页面的主要内容在下面使用 data 参数。主要内容是从扩展根模板的模板呈现的。两者都需要自己的参数才能正确呈现。

有没有办法在每个处理程序中部分呈现视图?

var app = require('express')()
app.set('view engine', 'pug')

app.get('/', (req, res, next) => {
    var userdata = '...'
    req.render('/index', {user: userdata}
    next() // the request is for /page
})

app.get('/page', (req, res, next) => {
   var moredata = '...'
   req.render('./page/index', {data: mroedata})
})

据我所知,这是不可能的,但作为替代方案,您可以使用 res.locals 来实现类似的效果:

let userMiddleware = (req, res, next) => {
  let userdata = '...';
  res.locals.user = userdata;
  next();
});

app.use(userMiddleware);

// This can stay the same:
app.get('/page', (req, res, next) => {
   var moredata = '...'
   req.render('./page/index', {data: mroedata})
})

这是一个中间件,可以使 user 变量可用于您的所有模板,在我看来这就是您想要的。

除了全局应用它,您还可以将它用于特定路由:

app.get('/page', userMiddleware, (req, res) => ...);