将请求对象传递给express.js中的jade

Ros*_*oss 2 node.js express pug

将请求对象传递给jade渲染器可能有什么问题?

这似乎是一种简单的工作方式.特别是当express.js已经将请求对象用作附加数据的载体时,因为HTTP请求进入其中间件端点.

因此,不是将自定义数据对象传递给渲染的玉,而是只需将数据附加到请求中,从而允许在jade中处理更多逻辑.例如:

app.get("/", function (req, res) {  
   res.render("index", req);
});
Run Code Online (Sandbox Code Playgroud)

做这种技术有后果吗?这可能是皱眉还是羡慕?它可能会暴露给玉石吗?性能影响?

例如,以下是一些希望将请求中已有数据发送给jade的人:

我确信有更多相关问题可以通过发送请求来解决.不建议,为什么?

Jon*_*ski 9

如何express处理当地人的设计似乎" 包括所需的东西 ".它只是没有对这是什么做出任何假设.

因此,如果在您的情况下,您需要附加到请求的大部分属性,并且不希望必须从中" 提取 "它们(" 而不是将自定义数据对象传递给呈现的玉 "),那应该没问题.

但是,可能的问题并不在于您是否将其包含在本地人中,而是您是否将其用作拐杖并使视图过于复杂.您希望保持您的观点相当简单,只需" 足够聪明 "即可呈现所需内容.


旁注:我建议定义它,req或者request是本地而不是它的属性:

res.render("index", { req: req });
Run Code Online (Sandbox Code Playgroud)

这至少提供了以下好处:

  1. 由于Express有3个本地的源,它需要合并(app.locals,res.localslocals传递给res.render()),这使得它可以在单个属性之后完成,而不必遍历请求中的所有内容.

  2. 任何方法仍然附加到实例而不是复制到普通Object.

您也可以将它附加在一个小型中间件中,因此它不是特定于路由的:

app.use(function (req, res, next) {
    res.locals.req = req;
    next();
});
Run Code Online (Sandbox Code Playgroud)