Mongoose报错:Model.create()不再接受回调函数,求解决方案
解决Mongoose
Model.create() 不支持回调的问题 原代码
app.post ('/create_contact',function(req,res) { contact.create({ name :req.body.name, phone:req.body.phone },function(err,newContact) { if(err){console.log('error in creating a contact!'); return;} console.log('********',newContact); return res.redirect('back'); }); });
报错信息
throw new MongooseError('Model.create() no longer accepts a callback'); ^ MongooseError: Model.create() no longer accepts a callback
问题原因
新版Mongoose已移除Model.create()方法的回调参数,必须改用Promise风格的异步写法。
修改方案
方案1:使用async/await(推荐,代码更清晰)
app.post('/create_contact', async function(req, res) { try { const newContact = await contact.create({ name: req.body.name, phone: req.body.phone }); console.log('********', newContact); return res.redirect('back'); } catch (err) { console.log('error in creating a contact!', err); // 可选:返回错误状态码给前端 // res.status(500).send('创建联系人失败'); return res.redirect('back'); } });
方案2:使用Promise的then/catch
app.post('/create_contact', function(req, res) { contact.create({ name: req.body.name, phone: req.body.phone }) .then(newContact => { console.log('********', newContact); return res.redirect('back'); }) .catch(err => { console.log('error in creating a contact!', err); return res.redirect('back'); }); });
排查提示
如果修改后仍报错,检查以下几点:
- 是否完全移除了
create()的第二个回调参数 - async/await写法中,是否给路由处理函数添加了
async关键字 - 是否存在语法错误(比如括号不匹配、变量名拼写错误)
- 在catch中打印完整错误信息,便于定位具体问题
内容的提问来源于stack exchange,提问作者vishal
相关产品推荐
相关产品推荐

