Mongoose Schema自定义验证器如何返回特定密码匹配错误信息?
解决Mongoose验证错误返回具体信息的问题
你的核心问题是路由的catch块没有捕获并处理Mongoose抛出的验证错误对象,导致只能返回通用提示。只需修改路由的错误处理逻辑,就能提取预设的自定义错误消息:
修改路由代码
把原来的catch块改成接收错误参数,并针对性处理Mongoose的ValidationError:
const express = require('express'); const User = require('../Models/usersModel'); const router = express.Router(); router.post('/userSignIn', async (req , res) => { try{ const data = new User ({ name: req.body.name, email: req.body.email, password: req.body.password, passwordConfirm: req.body.passwordConfirm }) const newUser = await data.save(); res.status(200).json(newUser); console.log('New user signed in succesfully.'); }catch(err){ // 接收错误对象err // 判断是否是Mongoose验证错误 if (err.name === 'ValidationError') { // 提取所有验证错误消息(如果有多个字段验证失败) const errorMessages = Object.values(err.errors).map(item => item.message); res.status(400).json({ message: errorMessages.join(', ') }); } else { // 其他错误返回通用提示 res.status(400).json({ message:'Something went wrong while trying to sign in a new user.' }); } }; }); module.exports = router;
关键说明
- Mongoose在验证失败时会抛出
ValidationError类型的错误,错误对象的errors属性包含每个字段的验证详情,其中message就是你在Schema中定义的自定义提示 - 如果你只想单独返回密码确认的错误,也可以针对性提取:
if (err.errors.passwordConfirm) { res.status(400).json({ message: err.errors.passwordConfirm.message }); }
内容的提问来源于stack exchange,提问作者user25543263
相关产品推荐
相关产品推荐

