如何声明可以从快速js中的任何视图调用的函数?

时间:2017-01-22 16:31:23

标签: javascript node.js express model-view-controller middleware

是否可以在我的express js mvc web app中的任何视图中创建一个可以调用的函数?如何在中间件中声明这样的函数直接从视图中访问?

所以我可以调用这个函数:

<%= getVar('my_name') %> // calling from the view 

并实现声明函数的变量的返回逻辑。此函数可以使用请求和响应对象。

注意:'my_name'可以是视图中无法从控制器分配的任何内容。

1 个答案:

答案 0 :(得分:1)

您可以向app.localsres.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();
});