我想在EJS过滤器中获取请求对象。有可能吗?
我的过滤器很简单,但我需要查看它在哪个区域被触发(通过url路径)来提供正确的资源。我相信我可以从请求中获取网址但是如何在此处获取网址?
我开始编写中间件函数,它会在函数范围内设置有趣的值,但它不起作用,因为在触发ejs过滤器之前,其他请求可以更改值。
我知道我可以使用域来处理它,但我还不熟悉它们,甚至我的节点版本都不支持它。
有没有一种简单的方法可以在ejs过滤器中获取req对象?
答案 0 :(得分:2)
听起来您的中间件解决方案是在正确的轨道上,但您使用的是app.locals
而不是res.locals
:
app.use(function(req, res, next) {
res.locals.request = req;
next();
});
app.locals
是一个应用程序范围的存储,每个新请求都会被覆盖; res.locals
是每个请求的唯一范围。
如果您想在过滤器中使用request
,您仍然必须将其作为参数传递:
<%=: myvar|myfilter:request %>
显然,如果这是您在过滤器中唯一需要的东西,那么您可以只使用.url
属性,而不是传递整个请求对象。