You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Postman响应中返回Mongoose验证错误信息

解决Mongoose验证错误返回至Postman响应的问题

问题根源

  1. send.save()是异步方法,未添加await导致错误无法被try/catch捕获,直接抛出到终端引发服务器崩溃。
  2. catch块变量名错误:参数为error,但代码中使用了未定义的err.message。
  3. Mongoose验证错误属于ValidationError类型,需提取字段对应错误信息,而非直接返回error.message。
  4. 额外问题:phone用Number类型不合理,电话号码可能含前导零且本质是字符串,建议改为String类型。

修改后的代码

1. 更新schema.js

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const SomeModelSchema = new Schema({
  phone: {
    type: String, // 改为String类型,适配电话号码特性
    required: true,
    unique: true,
    validate: {
      validator: (val) => {
        const re = /^\d{10}$/;
        return re.test(val); // required已确保有值,无需判断!val
      },
      message: 'Provided phone number is invalid.'
    },
  },
});

module.exports = mongoose.model("SomeModel", SomeModelSchema);

2. 更新Post方法

router.post("/admin/add_profile", async (req, res) => {
  try {
    const send = new SomeModel({ 
      phone: req.body.phone,
    });
    await send.save(); // 添加await,捕获异步操作错误
 
    res.json({
      responseMessage: "Everything worked as expected",
    });
  } catch (error) {
    // 处理Mongoose字段验证错误
    if (error.name === 'ValidationError') {
      const errors = Object.values(error.errors).map(err => err.message);
      return res.status(400).json({ 
        error: true,
        errorMessages: errors 
      });
    }
    // 处理手机号重复的唯一键错误
    if (error.code === 11000) {
      return res.status(400).json({
        error: true,
        errorMessage: 'Phone number already exists.'
      });
    }
    // 处理其他未知服务器错误
    res.status(500).json({
      error: true,
      errorMessage: 'Server error occurred.'
    });
  }
});

效果说明

  • 添加await send.save()后,异步操作错误会被try/catch捕获,避免服务器崩溃。
  • 针对ValidationError提取具体字段错误信息,以JSON格式返回至Postman。
  • 额外处理了手机号重复的唯一键冲突错误,覆盖unique属性带来的异常场景。
  • 改为String类型存储手机号,避免前导零丢失问题。

内容的提问来源于stack exchange,提问作者sumanth.js

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:01:10