在Express 4服务器中,我具有一个中间件功能,该功能可以检查用户是否已登录并相应地调整请求。
app.use((req, res, next) => {
const { IdToken } = req.signedCookies;
if (!IdToken) {
req.signedIn = false;
} else {
// TODO: Verify IdToken
req.signedIn = true;
}
next();
});
当前,在每条路由中,我都手动将登录状态添加到每个res.render
。
router.get('/', (req, res) => {
res.render('index', { signedIn: req.signedIn });
});
我可以以某种方式包括此信息,而无需将其手动添加到每个res.render
呼叫中吗?
答案 0 :(得分:0)
添加一个中间件,该中间件添加一个req.view
函数和一个req.addState
函数。
function addViewer(req, res, next) {
req.state = {}
req.addState = function(key, value) {
req.state[key] = value
}
res.view = function(viewName, moreState) {
res.render(viewName, Object.assign({}, req.state, moreState));
}
next();
}
现在您可以呼叫res.view
而不是res.render
。请注意,您可以使视图功能更强大,并且addState
更可自定义。