用express传递中间件数据的最佳方法

时间:2017-10-08 01:05:43

标签: javascript node.js express middleware

我想在导航栏中显示用户详细信息(例如:用户名),为此我一直在向我的视图发送'req.session.user'变量。

我一直在做的是,对于每个视图渲染,我都像这样发送req.session变量:

function addTestCaseToTestRail() {
  return compareTestRailAndProtractor()
    .then(async function(tests) {
        var testsLength = tests.tests.length;
        var url = testRailURL + testRailData.addTestEndPoint;

        for (var i = 0; i < testsLength; i++) {
          await new Promise((resolve, reject) => {
              if (tests.tests[i].id == undefined) {
                var newId = ""
                var options = {
                  url: url,
                  headers: headers,
                  body: {
                    "title": tests.tests[i].name,
                    "custom_jira_component": 465
                  },
                  json: true
                }
                request.post(options, function(err, httpResponse, body) {
                  if (err) {
                    reject(err);
                  }
                  newId = body.id;
                  tests.tests[i].id = newId;
                  resolve();
                });

              } else {
                resolve()
              }    
          });
      }
      return tests
    })
}

function test() {
  addTestCaseToTestRail()
    .then(function(tests) {
      console.log(tests);
    })
    .catch(function(err) {
      console.error(err)
    })
}

test()

然后在我的骨干视图中,我的导航栏位于其中,我打印出用户名。

克服这种重复成就的最佳做法是什么? 我搜索过,但没有结果。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您不想将req.session.user发送到这样的每个页面:{user:req.session.user},您可以将此数据添加到res.locals对象:

app.use(function(req, res, next) {
    res.locals.user = req.session.user
    next()
})

因此,在每个页面上,您可以输出这样的用户名(带ejs的示例):

<% if (user) { %>
    <h1>Hello, <%= user.name %></h1>
<% } %>