2012-06-14 16 views
16

En expreso, me han definido algunas rutasProcedimiento para interceptar Node.js petición expresa

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

he definido cómo manejar las solicitudes dentro de un controlador de cliente. ¿Hay alguna forma de que pueda hacer un preprocesamiento de las solicitudes antes de manejarlas en mi controlador? Específicamente, quiero verificar si la persona que llama a la API está autorizada para acceder a la ruta, usando la noción de niveles de acceso. Cualquier consejo sería apreciado.

+0

Piense en conectar/expresar como masajista con muchas manos, cada mano es un middleware que masajea su solicitud en la respuesta correcta. Entonces, lo que Ryan Olds dice es 100% correcto. ;) – Pickels

Respuesta

39

Puede hacer lo que necesita de varias maneras.

Esto colocará un middleware que se utilizará antes de tocar el enrutador. Asegúrese de que el enrutador se haya agregado con app.use() después. El orden de middleware es importante.

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

También puede usar un middleware de ruta.

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

esto va a hacer un paso de procesamiento previo para esa ruta.

Nota: Asegúrese de que sus invocaciones a app.use() estén antes de las definiciones de ruta. La definición de una ruta agrega automáticamente app.router a la cadena de middleware, lo que puede ponerlo por delante del middleware definido por el usuario.

+0

Muchas gracias, ¡esta es una respuesta increíble! –

+0

¡Hermoso! Gracias, Ryan – luigi7up

+0

@ ryan-olds, ¿Cómo verifico 'Content-Type'? Tengo que establecer el vencimiento solo en JSON, no en todas las respuestas. –

Cuestiones relacionadas