javascript - 如何在express js中声明一个可以从任何 View 调用的函数?

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

是否可以在某个地方创建一个可以从我的 Express JS MVC Web 应用程序中的任何 View 调用的函数?如何在中间件中声明这样的函数以便直接从 View 访问?

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

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

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

注意:“my_name”可以是 View 上无法从 Controller 分配的任何内容。

最佳答案

您可以向 app.localsres.locals 添加函数,就像向其中添加变量一样。如果您希望在那里提供请求和响应(坦率地说,我觉得这有点影响您的 Controller 应该做的事情),您可以创建一个中间件并将其传递进去。

根据您在评论中所说的,实际上最好只设置 View 可以使用的变量,例如:

app.use((req, res, next) => {
   res.locals.value = req.session.value || 'default value';
   next();
});

如果您确实需要该函数在 View 中可用,您可以以相同的方式进行设置,并根据需要将请求和响应绑定(bind)到该函数:

function getVar(req, res, anotherArg) {
   // do whatever
}

app.use((req, res, next) => {
   res.locals.getVar= getVar.bind(null, req, res);
   next();
});

关于javascript - 如何在express js中声明一个可以从任何 View 调用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793373/

相关文章:

javascript - 验证 php 和 javascript 中一个字段的值大于另一个字段的值

javascript - 在启动时使用 Meteor FS Collections 将 wav 转换为 mp3

javascript - Node.js puppeteer - 如何从表中仅获取某些(过滤器)记录

javascript - 如何使用相同的 HTML 通过不同的 url 呈现不同的内容?

javascript - 如何获取 json 中具有相同往返时间的所有日期名称?

javascript - 在 Safari 和 <IE9 上模拟 window.performance.timing

node.js - Electron - "Cannot read property ' on' of undefined”;尝试重新安装,

node.js - 如何使用 headless : true? 使用 puppeteer 下载文件

node.js - 捕获 Node.js 快速代理应用程序中的异常

javascript - 如何创建 Express api 可执行文件