Node JS Mongoose Async Callbacks

时间:2018-05-17 13:25:25

标签: node.js mongoose asynccallback

我已经得到了这段代码,我似乎陷入了混乱。 它的作用是创造用户。现在,如果用户有公司,那么应该与用户一起创建该公司并相应地进行链接。如果公司已经存在,那么就不应该创建公司,也不应该将其归因于用户。

首先,代码查找公司,如果找不到公司,则创建公司。生活很好。但是,如果我要在我的" if(!company)"检查我是否会复制我的大部分创建用户代码。我也相信我无法检查公司,然后像通常用其他语言一样同步运行用户创建。因此,我有点卡住..

module.exports = {
  postUsers: (req, res) => {
    'use strict'
    Company.findOne({name: req.body.company}, (err, company) => {
      if (err) {
        Logger.error(err)
        return res.send(500, err)
      }
      if (!company) {
        // only attribute a company if one doesn't exist
        // don't want users to assign themselves to existing companies automatically
        // need approval in place from an existing company member
        let newCompanyToAdd = new Company({
          name: req.body.company
        })
        newCompanyToAdd.save(err => {
          if (err) {
            Logger.error(err)
            return res.send(500, err)
          }
          let user = new User({
            username: req.body.username,
            password: req.body.password,
            firstname: req.body.firstname,
            lastname: req.body.lastname,
            company: newCompanyToAdd.id
          })
          user.save(err => {
            if (err) {
              return res.send(500, err)
            }
            res.status(200).json({ message: 'New User Added' })
          })
        })
      }
    })
  }

EDIT#

  postUsers: (req, res) => {
    'use strict'
    let user = new User({
      username: req.body.username,
      password: req.body.password,
      firstname: req.body.firstname,
      lastname: req.body.lastname
    })
    Company.findOne({name: req.body.company}, (err, company) => {
      if (err) {
        Logger.error(err)
        return res.send(500, err)
      }
      if (!company && req.name.company !== undefined) {
        // only attribute a company if one doesn't exist
        // don't want users to assign themselves to existing companies automatically
        // need approval in place from an existing company member
        let newCompanyToAdd = new Company({
          name: req.body.company
        })
        newCompanyToAdd.save(err => {
          if (err) {
            Logger.error(err)
            return res.send(500, err)
          }
          user.company = newCompanyToAdd._id
        })
      }
    })
    user.save(err => {
      if (err) {
        return res.send(500, err)
      }
      res.status(200).json({ message: 'New User Added' })
    })
  }

1 个答案:

答案 0 :(得分:0)

我不完全确定我理解总体目标。但似乎您担心要复制添加用户代码,因为无论公司是否已存在,您都需要添加用户。您有什么理由可以先保存用户,并在回调中有条件地创建公司吗?