Cómo poner middleware en su propio archivo en Node.js / Express.js

Soy nuevo en todo lo relacionado con Node.js, así que todavía estoy tratando de entender cómo se “conectan” las cosas.

Estoy tratando de usar la validación de forma expresa . Según los documentos que puede hacer

app.post( '/user', // Route form( // Form filter and validation middleware filter("username").trim() ), // Express request-handler gets filtered and validated data function(req, res){ if (!req.form.isValid) { // Handle errors console.log(req.form.errors); } else { // Or, use filtered form data from the form object: console.log("Username:", req.form.username); } } ); 

En App.js. Sin embargo, si pongo algo como app.get('/user', user.index); Puedo poner el código del controlador en un archivo separado. Me gustaría hacer lo mismo con el middleware de validación (o poner el código de validación en el controlador) para que el archivo App.js sea más fácil de ver una vez que comience a agregar más páginas.

¿Hay alguna manera de lograr esto?

Básicamente me gustaría poner algo como app.get('/user', validation.user, user.index);

Así es como se definen sus rutas:

rutas.js:

 module.exports = function(app){ app.get("route1", function(req,res){...}) app.get("route2", function(req,res){...}) } 

Así es como define sus middlewares:

middlewares.js:

 module.exports = { formHandler: function(req, res, next){...} } 

app.js:

 // Add your middlewares: middlewares = require("middlewares"); app.use(middlewares.formHandler); app.use(middlewares...); // Initialize your routes: require("routes")(app) 

Otra forma sería usar su middleware por ruta :

rutas.js:

 middlewares = require("middlewares") module.exports = function(app){ app.get("route1", middlewares.formHandler, function(req,res){...}) app.get("route2", function(req,res){...}) } 

Espero que responda a sus preguntas.

Puede colocar las funciones de middleware en un módulo separado de la misma manera que lo hace para las funciones del controlador. Es solo una función exportada con el conjunto apropiado de parámetros.

Entonces, si tuviera un archivo validation.js , podría agregar su método de validación de user como:

 exports.user = function (req, res, next) { ... // validate req and call next when done };