Node.js 如何在EJS筛选器中获取请求对象?
我想在EJS过滤器中获取请求对象。可能吗 我的过滤器非常简单,但我需要查看它在哪个区域触发(通过url路径)以提供正确的资产。我相信我可以从请求中获取url,但如何在这里获取 我开始编写中间件函数,它将在函数范围内设置有趣的值,但它不会工作,因为在触发ejs筛选器之前,其他请求可以更改值 我知道我可以处理域,但我还不熟悉它们,甚至我的节点版本也不支持它Node.js 如何在EJS筛选器中获取请求对象?,node.js,ejs,Node.js,Ejs,我想在EJS过滤器中获取请求对象。可能吗 我的过滤器非常简单,但我需要查看它在哪个区域触发(通过url路径)以提供正确的资产。我相信我可以从请求中获取url,但如何在这里获取 我开始编写中间件函数,它将在函数范围内设置有趣的值,但它不会工作,因为在触发ejs筛选器之前,其他请求可以更改值 我知道我可以处理域,但我还不熟悉它们,甚至我的节点版本也不支持它 有没有一种简单的方法可以在ejs筛选器中获取req对象?听起来您的中间件解决方案是正确的,但是您使用了app.locals而不是res.loca
有没有一种简单的方法可以在ejs筛选器中获取req对象?听起来您的中间件解决方案是正确的,但是您使用了
app.locals
而不是res.locals
:
app.use(function(req, res, next) {
res.locals.request = req;
next();
});
app.locals
是一个应用程序范围的存储,每个新请求都会覆盖它res.locals
的作用域仅限于每个请求
如果要在筛选器中使用request
,仍需将其作为参数传递:
<%=: myvar|myfilter:request %>
显然,如果过滤器中只需要
.url
属性,就可以使用它,而不是传递整个请求对象。Hmmm所以我应该将res放入clousre范围,然后在过滤器中使用res.locals@xaoonipu很抱歉,我忘记了如何从你的过滤器中使用它,我编辑了我的答案。嘿-看起来这是最好的解决方案(在你编辑之后)-我已经把我想要的一切都放在了结尾;)非常感谢。@xaoonipu是的,中间件不是绝对必要的,除非您希望请求
变量在任何地方都可用,而不必每次都将其包含在res.render
调用中:)