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) => ...);
我有一个使用 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) => ...);