2015-07-02 1 views
0

У меня есть приложение Express, в котором я использую промежуточное программное обеспечение для форматирования ответа после обработчиков маршрутов. Таким образом, после добавления данных в объект res, все мои маршруты вызывают next() для вызова форматирования.Express 4: Разветвление промежуточного ПО

Я хочу обрабатывать 404s логически. Тем не менее, я не могу использовать промежуточное ПО для этого, так как все мои обработчики маршрутов звонят next(); создание универсального маршрута (app.use('*', 404function...)) означает, что все становится ошибкой 404, даже правильными маршрутами.

Есть ли способ узнать, не соответствует ли маршрут в обработчиках? В качестве альтернативы, есть ли способ, чтобы маршрут специфически вызывал промежуточное ПО ошибки (функция с arity 4)?

+0

обработчик 404 должен будет идти после вашего форматирования или быть его частью. –

+0

@KevinB Я надеялся, что это не будет частью этого. В принципе, это обработчик успеха, который форматирует мой json в формате [JSend] (http://labs.omniti.com/labs/jsend) - возвращает статус 200, если на самом деле не существует ошибки. Это то, что вызывается 'next()'. С ответом Патрика Мерфи я могу пропустить 404, только если маршрут не соответствует, вместо одного обработчика, переопределяющего другого. –

+0

Его ответ в основном делает то, что я предлагаю, только в обратном направлении. Возможно, я просто не был достаточно ясен. в основном, если ваш форматировщик имеет данные для форматирования и возврата, он делает, а если нет, он вызывает next(). ваши 404 и обработчики ошибок затем поймают его. –

ответ

2

Вы можете проверить, определено ли в вашем форматировании req.route. Если это так, запрос соответствует маршруту, и вы можете отформатировать данные ответа; в противном случае либо сгенерируйте 404 на месте, либо передайте его, используя next.

+0

Это сработало отлично. Я подумал, что есть что-то вроде этого, но я не думал о 'req.route' - я понял, что любой маршрут маршрутизации всегда будет определен, так как это то, что вы вызываете. Потрясающие! –