2012-06-14 3 views
16

В экспресс, я определил некоторые маршрутыКак перехватывать node.js экспресс запрос

app.post("/api/v1/client", Client.create); 
app.get("/api/v1/client", Client.get); 
... 

Я определил, как обрабатывать запросы внутри контроллера клиента. Есть ли способ, которым я могу выполнить предварительную обработку запросов, прежде чем обращаться с ними в моем контроллере? Я специально хочу проверить, разрешен ли автоответчик API для доступа к маршруту, используя понятие уровней доступа. Любой совет будет принят во внимание.

+0

Подумайте о соединении/выражении как массажист с множеством рук, каждая из которых является промежуточным программным обеспечением, которое массирует ваш запрос в правильный ответ. Итак, что говорит Райан Олдс, на 100% правильно. ;) – Pickels

ответ

39

Вы можете сделать все, что вам нужно, несколькими способами.

Это позволит установить промежуточное программное обеспечение, которое будет использоваться перед ударом по маршрутизатору. Убедитесь, что маршрутизатор добавлен с app.use() после. Приоритет промежуточного уровня важен.

app.use(function(req, res, next) { 
    // Put some preprocessing here. 
    next(); 
}); 
app.use(app.router); 

Вы также можете использовать промежуточное программное обеспечение маршрута.

var someFunction = function(req, res, next) { 
    // Put the preprocessing here. 
    next(); 
}; 
app.post("/api/v1/client", someFunction, Client.create); 

Это сделает шаг предварительной обработки для этого маршрута.

Примечание. Убедитесь, что ваши вызовы app.use() находятся перед определениями маршрута. Определение маршрута автоматически добавляет app.router в цепочку промежуточного программного обеспечения, что может привести к превышению установленного пользователем промежуточного программного обеспечения.

+0

Большое спасибо, это замечательный ответ! –

+0

Красивая! Спасибо, Ryan – luigi7up

+0

@ ryan-olds, Как проверить 'Content-Type'? Я должен истекать только на JSON, а не во всех ответах. –

Смежные вопросы