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

为什么这段Node.js代码未按预期抛出错误并执行?

问题:Mongoose邮箱格式验证未触发预期错误

这段Node.js代码本应在保存邮箱格式无效的文档时触发验证错误,但实际运行后仅输出santu和connnection estabished就停止,未抛出邮箱格式无效的错误。

代码如下:

const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/mynewdb').
then(()=>{console.log("connnection estabished")})
.catch((err)=>{console.log(err)});


//create a schema
const createschema = new mongoose.Schema({
    name : {
        type : String
    },
    email:{
        type : String,

        validate(value){
            console.log(value);
            if(validator.isEmail(value)===false){
                throw new Error('invalid Email');
            }
        }
    }
})
//creating a collection/model
const mycollection1 = new mongoose.model("mycollection1",createschema);


const insertdata = async()=>{
    try{
        const doc1 = new mycollection1({
            name : "santu1",
            email : "santu"
        })
        const mydata = await doc1.save();
        console.log(mydata);
    }
    catch{(err)=>{
        console.log(err);
    }}
}
insertdata();

问题原因及修复方案

核心问题点

  • 未导入validator模块:代码中调用了validator.isEmail()但未引入对应的npm包,导致该函数未定义,执行时会抛出ReferenceError,但因为catch块语法错误,这个错误没被捕获输出。
  • catch语法错误:catch{(err)=>{console.log(err);}}的写法不符合JavaScript语法规范,正确的catch块写法应为catch(err) { ... }或catch(err) => { ... },语法错误导致错误无法被捕获处理。

修复后的代码

const mongoose = require('mongoose');
const validator = require('validator'); // 导入validator验证模块

mongoose.connect('mongodb://localhost:27017/mynewdb')
  .then(() => console.log("connection established"))
  .catch(err => console.log(err));

// 创建schema
const createschema = new mongoose.Schema({
  name: {
    type: String
  },
  email: {
    type: String,
    validate(value) {
      console.log(value);
      if (!validator.isEmail(value)) {
        throw new Error('invalid Email');
      }
    }
  }
});

// 创建集合/model
const mycollection1 = mongoose.model("mycollection1", createschema);

const insertdata = async () => {
  try {
    const doc1 = new mycollection1({
      name: "santu1",
      email: "santu"
    });
    const mydata = await doc1.save();
    console.log(mydata);
  } catch (err) { // 修正catch块语法
    console.log(err);
  }
};

insertdata();

修复说明

  1. 新增const validator = require('validator');语句,确保validator.isEmail()方法能正常调用。
  2. 修正catch块的语法错误,保证验证失败时抛出的错误能被正确捕获并输出到控制台。

内容的提问来源于stack exchange,提问作者user15998452

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:05:24