Mongoose 7.0.0中Model.insertMany()不支持回调的替代方案咨询
解决Mongoose 7.0.0中
Model.insertMany()不支持回调的问题 Mongoose 7.0.0开始移除了insertMany()方法的回调函数支持,该方法现在仅返回Promise,因此不能再通过传入回调来处理结果或错误。以下是两种可行的替代方案:
方案1:使用Promise的.then()/.catch()语法
直接利用insertMany()返回的Promise,通过链式调用处理成功和失败情况:
// 替换原有的insertMany调用 Item.insertMany(defaultItem) .then(() => { console.log("Items added successfully"); }) .catch(err => { console.log(err); });
方案2:使用async/await语法(推荐)
这种写法更简洁易读,适合异步逻辑较多的场景。可以把数据库初始化和数据插入的逻辑封装到一个异步函数中:
const express = require("express"); const mongoose = require("mongoose"); const bodyParser = require("body-parser"); const date = require(__dirname + "/date.js"); const app = express(); app.set('view engine', 'ejs'); app.use(bodyParser.urlencoded({extended: true})); app.use(express.static("public")); const itemSchema = new mongoose.Schema({ name:String }); const Item = mongoose.model("Item", itemSchema); const Item1= new Item({ name:"Welcome to the todolist" }); const Item2= new Item({ name:"Click + button to add items" }); const Item3= new Item({ name:"click delete to remove item" }); const defaultItem= [Item1, Item2, Item3 ]; // 封装异步初始化函数 async function initDatabase() { try { // 连接数据库 await mongoose.connect("mongodb://127.0.0.1/todolistDB", {useNewUrlParser:true}); // 插入数据 await Item.insertMany(defaultItem); console.log("Items added successfully"); } catch (err) { console.log(err); } } // 执行初始化 initDatabase();
另外注意你原代码中的回调写法存在语法错误:你传入的是一个包含if语句的对象,而非合法的回调函数,但即使写法正确,Mongoose 7也不再支持这种方式,因此必须改用上述基于Promise的写法。
内容的提问来源于stack exchange,提问作者Badal Kumar
相关产品推荐
相关产品推荐

