2015-06-19 1 views
1

Я установил промежуточное программное обеспечение, чтобы проверить наличие требуемого параметра в вызове API. Проблема в том, что если этот параметр отсутствует, мое промежуточное ПО никогда не будет вызвано. Я просто получаю общую ошибку 404, потому что маршрут не может быть идентифицирован. Я пытаюсь выяснить, что я пропускаю:Как проверить наличие параметра в вызове API

routes.js:

router.get('/players/:id/info', 
    middleware.params.ensureExist, 
    info.index 
); 

/middleware/params.js:

var ensureExist = function(req, res, next) { 
    var id = req.params && req.params.id; 
    if (id) { 
    return next(); 
    } else { 
    logger.warn('req.params.id required.', { error: 'Missing req.params.id' }); 
    return res.status(400).send({ error: 'Missing req.params.id' }); 
    } 
}; 

GET '/players/56/info' производит ожидаемый ответ. Однако GET '/players/info' просто дает мне общий 404 вместо пользовательского сообщения об ошибке выше.

ответ

1

Проблема заключается в том, что ваше промежуточное программное обеспечение будет вызываться только на маршрутах, которые включают параметр :id, поскольку он установлен на '/players/:id/info'. Вам нужно будет установить его на '/players', чтобы соответствовать обоим случаям.

+0

Извините, это была только опечатка с моей стороны. Исправлено. – MattDionis

+0

К сожалению, это должен был быть комментарий, а не ответ! Я обвиняю свой мобильный. –

+0

Изменен на мой фактический ответ, извините за это. –