将无效数据传递到架构时,猫鼬不会引发错误

时间:2019-08-13 15:06:53

标签: node.js mongoose

我有以下代码:

const userSchema = new mongoose.Schema({
  email: {
     type : String,
     required : true
  },
  password: String,
  username : String,
});

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


const loadCollection = async() => {
   await mongoose.connect(url,{useNewUrlParser : true})
   return mongoose.connection.collection("users");
}

现在,当用户访问端点时,我需要创建一个新用户,为此,我正在使用以下代码:

router.post('/adduser',async (req,res)=>{
    const db = await loadCollection()
    const newUser = new User({
        password : 10,
        username : 10,
    })
    try {
        await db.insertOne(newUser)
        res.status(201).send()
    } catch(e) {
        // should be triggered because of the invalid data input 
        res.status(400).send()
    }
})

如您所见,我正在将数字传递到所有这些应为String类型的值中……也没有通过email这是必填字段...文档正在获取保存到数据库中而不会引发任何错误...请注意,我不想使用save()方法,因为我有需要使用findOneAndUpdate更新的子模式 有什么方法可以不使用save()方法,当然也可以使用猫鼬来引发错误。

1 个答案:

答案 0 :(得分:0)

您可以使用validate方法。

所以在您的代码中,我可能会按照以下步骤进行操作:

router.post('/adduser',async (req,res)=>{
    const db = await loadCollection()
try {
    const newUser = new User({
        password : 10,
        username : 10,
    })
       await newUser.validate()

        await db.insertOne(newUser)
        res.status(201).send()
    } catch(e) {
        // should be triggered because of the invalid data input 
        res.status(400).send()
    }
})

这是mongoose参考