使用Mongoose og promises

时间:2017-09-07 16:45:24

标签: node.js mongoose promise

如何提供用户名和密码并检查用户是否已存在,如果不存在,我想创建用户。所以它应该基本上是一个get或create函数。

我认为它可能像

const username = 'username';
const password = 'password';

User.findOne({ username }).then(existingUser => {
  if (!existingUser) {
    return User.create({ username, password }).then(newUser => {
      return newUser;
    }).catch(console.error);
  }

  existingUser.comparePassword(password, (err, isMatch) => {
    if (!isMatch) { return null; }

    return existingUser;
  });
}).catch(console.error);

问题在于我完全理解如何构建承诺。

我想我应该只有1个捕获而不是2个,如本例所示。

那么我怎样才能构建这样的结构,以便我总是返回用户(无论是现有的还是新的)还是null

1 个答案:

答案 0 :(得分:0)

  

我想我应该只有1个捕获而不是2个,如本例所示。

是的,你应该。

  

那么我怎样才能构建这样的结构,以便我总是返回用户(无论是现有的还是新的)还是null?

您可以使用以下解决方案:

const username = 'username';
const password = 'password';

User
  .findOne({ username })
  .then(existingUser => {
    if (!existingUser) {
      return User.create({ username, password });
    }
    return new Promise((resolve, reject) => existingUser.comparePassword(password, (err, isMatch) => {
      if (!isMatch) {
        return reject(new Error('Incorrect password'));
      }
      resolve(user);
    });
  })
  .catch(console.error);