Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何解决下一个不是函数的错误消息?_Node.js_Mean Stack - Fatal编程技术网

Node.js 如何解决下一个不是函数的错误消息?

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

我正在尝试创建一个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 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
从来都不是一个函数