如何在express js中声明一个可以从任何视图调用的函数?
How to declare a function that can be called from any view in express js?
是否可以在我的 express js mvc web 应用程序中创建一个可以从任何视图调用的函数?如何在中间件中声明这样的函数以直接从视图访问?
所以我可以这样调用这个函数:
<%= getVar('my_name') %> // calling from the view
并实现声明函数的变量的 return 逻辑。此函数可以使用请求和响应对象。
注意:'my_name' 可以是视图上无法从控制器分配的任何内容。
您可以向 app.locals
或 res.locals
添加函数,就像向其添加变量一样。如果你想在那里提供请求和响应(坦率地说,我觉得你的控制器应该做什么),你可以创建一个中间件并将它们传递进去。
根据您在评论中所说的,实际上最好只设置视图可以使用的变量,例如:
app.use((req, res, next) => {
res.locals.value = req.session.value || 'default value';
next();
});
如果确实需要该功能在视图中可用,您可以同样设置,如果需要,将请求和响应绑定到该功能:
function getVar(req, res, anotherArg) {
// do whatever
}
app.use((req, res, next) => {
res.locals.getVar= getVar.bind(null, req, res);
next();
});
是否可以在我的 express js mvc web 应用程序中创建一个可以从任何视图调用的函数?如何在中间件中声明这样的函数以直接从视图访问?
所以我可以这样调用这个函数:
<%= getVar('my_name') %> // calling from the view
并实现声明函数的变量的 return 逻辑。此函数可以使用请求和响应对象。
注意:'my_name' 可以是视图上无法从控制器分配的任何内容。
您可以向 app.locals
或 res.locals
添加函数,就像向其添加变量一样。如果你想在那里提供请求和响应(坦率地说,我觉得你的控制器应该做什么),你可以创建一个中间件并将它们传递进去。
根据您在评论中所说的,实际上最好只设置视图可以使用的变量,例如:
app.use((req, res, next) => {
res.locals.value = req.session.value || 'default value';
next();
});
如果确实需要该功能在视图中可用,您可以同样设置,如果需要,将请求和响应绑定到该功能:
function getVar(req, res, anotherArg) {
// do whatever
}
app.use((req, res, next) => {
res.locals.getVar= getVar.bind(null, req, res);
next();
});