Node.js 如何解决下一个不是函数的错误消息?
我正在尝试创建一个MEAN stack应用程序,我目前正在开发更新功能 我的代码当前在运行到此方法时失败:Node.js 如何解决下一个不是函数的错误消息?,node.js,mean-stack,Node.js,Mean Stack,我正在尝试创建一个MEAN stack应用程序,我目前正在开发更新功能 我的代码当前在运行到此方法时失败: businessRoutes.route('/update/:id').post(function (req, res) { Business.findById(req.params.id, function (err, business) { if (!business) return next(new Error('Could not loa
businessRoutes.route('/update/:id').post(function (req, res) {
Business.findById(req.params.id, function (err, business) {
if (!business)
return next(new Error('Could not load Document'));
else {
business.person_name = req.body.person_name;
business.business_name = req.body.business_name;
business.business_gst_number = req.body.business_gst_number;
business.save().then(business => {
res.json('Update complete');
console.log('Update Complete');
})
.catch(err => {
res.status(400).send("unable to update the database");
});
}
});
});
控制台中显示的错误消息为:
TypeError:next不是函数
这行代码失败:
return next(new Error('Could not load Document'));
有人能告诉我为什么会发生这种情况以及我如何解决它吗?以下是您可能的意思: 问题是,您想要成为“下一个”的参数实际上来自express.js(这意味着它在您运行的第一个函数回调时出现(在
.post(
---此函数)--之后),您可以选择使用3个参数:
用户向服务器发出的请求req
准备发送的响应res
第三个参数是可选的,允许您发送到下一个中间件,或者如果您发送一个参数,它将发送到错误处理程序,该错误处理程序将发送您的错误作为响应next
你在你试图调用的MangoOS函数中间随机放置了<代码> Nex/Cuth.PARAM:MangoOSE函数实际上只需要(Err,item)…< /P>
businessRoutes.route('/update/:id').post(函数(req、res、next){
//请注意,express公开了“next”参数
//这是一个回调,指示运行“下一个”中间件
Business.findById(req.params.id,函数(err,Business,whowknows){
//注意这是来自mongoose.js的:回调函数实际上只有2个参数(err和foundObject)
如果(!业务)
返回next(新错误('无法加载文档');
否则{
business.person\u name=req.body.person\u name;
business.business\u name=req.body.business\u name;
business.business\u gst\u编号=req.body.business\u gst\u编号;
business.save().then(business=>{
res.json(“更新完成”);
})
.catch(错误=>{
res.status(400).send(“无法更新数据库”);
});
}
});
})findById
的第二个参数需要一个包含两个参数的回调,err
和
。没有中间件或其他东西,您调用的下一个(…)
尝试调用您找到的实体
从文件中
Adventure.findById(id, function (err, adventure) {});
你看,在你的例子中,business
总是没有定义,adventure
或next
从来都不是一个函数