我想在我的 EJS 过滤器中获取请求对象。是否可以?
我的过滤器非常简单,但我需要查看它在哪个区域触发(通过 url 路径)以提供正确的资产。我相信我可以从请求中获取 url,但是如何在这里获取它?
我开始编写中间件函数,它会在函数范围内设置有趣的值,但它不起作用,因为在触发 ejs 过滤器之前,其他请求可以更改值。
我知道我可以使用域来处理它,但我还不熟悉它们,甚至我的节点版本也不支持它。
有没有一种简单的方法可以在 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
显然,如果这是您过滤器中唯一需要的东西,您可以只使用该属性,而不是传递整个请求对象。