1

我想在我的 EJS 过滤器中获取请求对象。是否可以?

我的过滤器非常简单,但我需要查看它在哪个区域触发(通过 url 路径)以提供正确的资产。我相信我可以从请求中获取 url,但是如何在这里获取它?

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

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

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

4

1 回答 1

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显然,如果这是您过滤器中唯一需要的东西,您可以只使用该属性,而不是传递整个请求对象。

于 2013-10-17T05:33:33.917 回答