如何在EJS过滤器中获取请求对象?

时间:2013-10-17 05:27:34

标签: node.js ejs

我想在EJS过滤器中获取请求对象。有可能吗?

我的过滤器很简单,但我需要查看它在哪个区域被触发(通过url路径)来提供正确的资源。我相信我可以从请求中获取网址但是如何在此处获取网址?

我开始编写中间件函数,它会在函数范围内设置有趣的值,但它不起作用,因为在触发ejs过滤器之前,其他请求可以更改值。

我知道我可以使用域来处理它,但我还不熟悉它们,甚至我的节点版本都不支持它。

有没有一种简单的方法可以在ejs过滤器中获取req对象?

1 个答案:

答案 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属性,而不是传递整个请求对象。