【问题标题】:How to get request object in EJS filter?如何在 EJS 过滤器中获取请求对象?
【发布时间】:2013-10-17 14:02:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: node.js ejs


    【解决方案1】:

    听起来您的中间件解决方案走上了正轨,但是您使用了app.locals 而不是res.locals

    app.use(function(req, res, next) {
      res.locals.request = req;
      next();
    });
    

    app.locals 是应用程序范围的存储,会被每个新请求覆盖; res.locals 对每个请求都有唯一的作用域。

    如果您想在过滤器中使用request,您仍然需要将其作为参数传递:

    <%=: myvar|myfilter:request %>
    

    显然,您可以只使用 .url 属性,而不是传递整个请求对象,如果这是您过滤器中唯一需要的东西。

    【讨论】:

    • 嗯,所以我应该将 res 放入 clousre 范围,然后在我的过滤器中使用 res.locals...?
    • @xaoonipu 抱歉,我忘记了如何从您的过滤器中使用它,我编辑了我的答案。
    • 嘿 - 看起来这是最好的解决方案(在你的编辑之后) - 我已经把我想要的一切都关闭了;)非常感谢。
    • @xaoonipu 是的,中间件并不是绝对必要的,除非您希望 request 变量在任何地方都可用,而不必每次都将其包含在 res.render 调用中:)
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多