在module.exports中使用需要模块变量

时间:2018-02-01 03:13:01

标签: javascript node.js express

所以我试图避免多次要求,因此我正在设计所有模块以从主app.js文件中获取参数。我有一个供用户登录的模块,如下所示:

module.exports = (express, router, jwt, user, config) => {
  function jwtSignUser (user) {
    const ONE_WEEK = 60 * 60 * 24 * 7
    return jwt.sign(user, config.authentication,jwtSecret, {
      expiresIn: ONE_WEEK
    })
  }
  router.post('/login', function(req, res, next) {
    const result = user.findOne(
      {
        email: req.body.email   
      },
      function (err, user) {
        if (err) {
          res.status(400).send(err)
        }
        console.log(user)
        res.send({
          user: user,
          token: jwtSignUser(user)
        })
      }
    )
  })
  return router
}

但是当我尝试运行它时,我收到错误TypeError: jwtSignUser is not a function

如何使用此函数但仍然让模块接受函数所需的参数(如jwt)?有没有更好的方法来构建它?我是Javascript的新手

1 个答案:

答案 0 :(得分:0)

我不知道这是否是“最佳”方式。但是我做了一些重新分解,并通过以下方式让它发挥作用:

var jwtSignUser = (jwt, config, user) => {
  const ONE_WEEK = 60 * 60 * 24 * 7
  return jwt.sign(user, config.authentication.jwtSecret, {
    expiresIn: ONE_WEEK
  })
}

var main = (express, router, jwt, user, config) => {
  router.post('/login', function(req, res, next) {
    const result = user.findOne(
      {
        email: req.body.email   
      },
      function (err, user) {
        if (err) {
          res.status(400).send(err)
        }
        console.log(user)
        res.send({
          user: user,
          token: jwtSignUser(jwt, config, user.toObject())
        })
      }
    )
  })
  return router
}

module.exports = main

更新

这不是此代码现在有效的真正原因。我有config.authentication,jwtSecret的部分应该是config.authentication.jwtSecret。无论我在哪里坚持使用jstSignUser函数,它现在似乎都能正常工作