Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在EJS筛选器中获取请求对象?_Node.js_Ejs - Fatal编程技术网

Node.js 如何在EJS筛选器中获取请求对象?

Node.js 如何在EJS筛选器中获取请求对象?,node.js,ejs,Node.js,Ejs,我想在EJS过滤器中获取请求对象。可能吗 我的过滤器非常简单,但我需要查看它在哪个区域触发(通过url路径)以提供正确的资产。我相信我可以从请求中获取url,但如何在这里获取 我开始编写中间件函数,它将在函数范围内设置有趣的值,但它不会工作,因为在触发ejs筛选器之前,其他请求可以更改值 我知道我可以处理域,但我还不熟悉它们,甚至我的节点版本也不支持它 有没有一种简单的方法可以在ejs筛选器中获取req对象?听起来您的中间件解决方案是正确的,但是您使用了app.locals而不是res.loca

我想在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
属性,就可以使用它,而不是传递整个请求对象。

Hmmm所以我应该将res放入clousre范围,然后在过滤器中使用res.locals@xaoonipu很抱歉,我忘记了如何从你的过滤器中使用它,我编辑了我的答案。嘿-看起来这是最好的解决方案(在你编辑之后)-我已经把我想要的一切都放在了结尾;)非常感谢。@xaoonipu是的,中间件不是绝对必要的,除非您希望
请求
变量在任何地方都可用,而不必每次都将其包含在
res.render
调用中:)