2017-03-19 10 views
0

私はNode.js-serverを実行しており、Expressで作成したこのRest APIをテストしようとしています。 Mongooseを使ってMongoDBにリンクしています。TypeError:next is not function

私はポストマンを使用して、個々のルートをテストすることだし、このルートに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(); 
    }); 
}); 

答えて

0

私はそれを理解しました。私が思ったよりずっと小さな誤りだった。 router.param-methodのコールバック関数へのパラメータが間違った順序でありました。 next-keywordは、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(); 
    }); 
}); 
2

ない答えをちょうどそれがあなたの代わりに、ネストされたコールバックの約束を使用する場合は、これらのようなエラーを見つけることは簡単だと言いたかったです。上記のコードの例はリファクタリングされています。

router.param("id", (req, res, id) => { 
 
    Meeting.findById(id) 
 
    .then(meeting => { meeting }) 
 
    .catch(err => res.status(404).send("Meeting not found")) 
 
});

+0

ヘッドアップをありがとう!私はそれを覚えておきます。 – SudokuNinja

関連する問題