通过数据库和表格中的参数比较模型

Comparison of models by parameters from the database and form

我遇到过这样的问题。在客户端,用户填写注册表,我在后端接受它(格式为json)。接下来,我需要做一个比较。如果通过email参数的文档已经存在于数据库中,则发送错误;如果不存在带有此类电子邮件的此类文档,则在数据库中创建一个新文档。

将有一块我的路线负责这些动作

    router.post('/register', checkNotAuthenticated, async (req, res) => {
      try {
           //Block for passport session
        const hashedPassword = await bcrypt.hash(req.body.password, 10)
        const username = users.push({
          id: Date.now().toString(),
          name: req.body.name,
          email: req.body.email,
          password: hashedPassword
        })
        //End of block for passport session

        const candidate = await User.findOne(username.email)
        if(candidate)  {
          console.log('User have been already registered!')
          console.log(candidate)
        } else {
          const participant = new User({
            name: req.body.name,
            email: req.body.email,
            password: hashedPassword
        })
        await participant.save()
        }
         res.redirect('/login')
      } catch(e) {
        res.redirect('/register')
        console.log(e);
      }

如果我的用户集合为空,则会创建一个新文档(例如:

{ inst: null,
  vk: null,
  _id: 5e10b72626f9107d861621c0,
  name: 'Ivan',
  email: 'w@w',
  password:
   'b$/2dDrTMCOXSZnaIgOgFEBuNKuU8mbRFKyV9.4U6brERsLpOVJoBAS',
  __v: 0 }

),但如果至少存在一个文档,则不允许我创建用户(User have been already registered!)。显然他一般检查是否存在带有电子邮件参数的文档,但我不知道如何找到带有电子邮件参数的确切文档,该文档是在客户端的表单上输入用户的(const candidate = await User.findOne(username.email/* 如何正确引用用户驱动到表单中的这个参数?*/))

 User.findOne({'email':username.email})