Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Javascript TypeError:next不是函数_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript TypeError:next不是函数

Javascript TypeError:next不是函数,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在运行一个Node.js-server并尝试测试我用Express制作的RESTAPI。它通过Mongoose连接到MongoDB 我正在使用Postman测试各个路由,尝试向该路由发送PUT请求时出错: // PUT /meetings/:id // Route for editing a specific meeting router.put("/:id", function(req, res, next) { req.meeting.update(req.date, funct

我正在运行一个Node.js-server并尝试测试我用Express制作的RESTAPI。它通过Mongoose连接到MongoDB

我正在使用Postman测试各个路由,尝试向该路由发送PUT请求时出错:

// PUT /meetings/:id
// Route for editing a specific meeting
router.put("/:id", function(req, res, next) {
    req.meeting.update(req.date, function(err, result) {
      if(err) return next(err);
      res.json(result);
    });
});
检索到的错误如下:

events.js:141
      throw er; // Unhandled 'error' event
      ^

TypeError: next is not a function
我不知道这到底是从哪里来的。我正在使用router.params-method指定:id参数的处理方式,如下所示:

router.param("id", function(req, res, id, next) {
  Meeting.findById(id, function(err, meeting) {
    if (err) return next(err);
    if (!meeting) {
      err = new Error("Meeting not found");
      err.status = 404;
      return next(err);
    }
    req.meeting = meeting;
    return next();
  });
});

所以我想出来了。这是一个比我想象的小得多的错误。我的router.param-method中回调函数的参数顺序错误。下一个关键字应该是id所在的位置。此代码修复了以下问题:

router.param("id", function(req, res, next, id) {
  Meeting.findById(id, function(err, meeting) {
    if (err) return next(err);
    if (!meeting) {
      err = new Error("Meeting not found");
      err.status = 404;
      return next(err);
    }
    req.meeting = meeting;
    return next();
  });
});

不是答案,只是想说,如果您使用承诺而不是嵌套回调,那么很容易找到这样的错误。上述代码的一个示例已重构

router.param(“id”,“req,res,id)=>{
会议。findById(id)
.然后(会议=>{meeting})
.catch(err=>res.status(404).send(“未找到会议”))
});