Узел JS Mongoose Асинхронные обратные вызовы - PullRequest
0 голосов
/ 17 мая 2018

У меня есть этот кусок кода, с которым я, похоже, немного путаюсь. Что он делает, так это создает пользователей. Теперь, если у пользователя есть компания, тогда эта компания должна быть создана вместе с пользователем и соответствующим образом связана. Если компания уже существует, ее не следует создавать и не следует приписывать пользователю.

Сначала код ищет компанию, если она не может найти, то создается. Жизнь хороша. Но если бы я добавил еще один к моей проверке "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 голосов
/ 17 мая 2018

Я не совсем уверен, что понимаю общую цель. Но, похоже, вы беспокоитесь о том, чтобы добавить код добавления пользователя, потому что вам нужно добавить пользователя независимо от того, существует компания или нет. Есть ли причина, по которой вы не можете сначала сохранить пользователя, а при обратном вызове условно создать компанию при необходимости?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...