为什么这段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();
修复说明
- 新增
const validator = require('validator');语句,确保validator.isEmail()方法能正常调用。 - 修正catch块的语法错误,保证验证失败时抛出的错误能被正确捕获并输出到控制台。
内容的提问来源于stack exchange,提问作者user15998452
相关产品推荐
相关产品推荐

