从猫鼬的POST请求中获取所有重复的密钥

时间:2020-11-10 12:07:42

标签: javascript node.js mongodb typescript mongoose

我决定尝试打字稿,并使用express创建一个小型身份验证API。我现在想做的是,使usernameemail唯一,因此我的猫鼬模式如下所示:

import * as mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
  username: {
    type: String,
    required: [true, 'Username is required!'],
    unique: true,
    min: 6,
    max: 255,
  },
  email: {
    type: String,
    required: [true, 'Email is required!'],
    unique: true,
    min: 6,
    max: 255,
  },
  password: {
    type: String,
    required: [true, 'Password is required!'],
    min: 6,
    max: 1024,
  },
  date: {
    type: Date,
    default: Date.now(),
  },
});

export const User = mongoose.model('User', userSchema);

我的控制器也很简单:

export async function registerUser(
  req: express.Request,
  res: express.Response,
): Promise<express.Response> {
  const user = new User({
    username: req.body.username,
    email: req.body.email,
    password: req.body.password,
  });
  const error = user.validateSync();
  if (error) {
    return res.status(400).json(error);
  }
  await user.save(function (err) {
    if (err) {
      return res.status(400).send(err);
    }
    return res.status(200).send({ success: true, message: 'User created!' });
  });
}

这一切都按预期工作,但是,如果我发出POST请求,而数据库中已经存在电子邮件和用户名,那么我在正文中都不会得到响应。例如,如果我通过以下方式发出POST请求:

{
    "username": "username2",
    "email": "emailblabla2",
    "password": "password1234"
}

在已经使用username2emailblabla2的地方,我将首先得到:

{
    "driver": true,
    "name": "MongoError",
    "index": 0,
    "code": 11000,
    "keyPattern": {
        "username": 1
    },
    "keyValue": {
        "username": "username2"
    }
}

作为响应,第二次尝试时,除了电子邮件,我将得到相同的信息。

是否可以同时获得两者?我是否应该甚至使用猫鼬来验证我的数据?我看到很多人都推荐joi,但是,我想如果猫鼬已经可以做到这一点,为什么还要使用附加的库。

0 个答案:

没有答案