如何在Node.js / Express.js中将中间件放在它自己的文件中

我是整个Node.js的新手,所以我仍然试图弄清楚事情如何“连接”。

我正在尝试使用快速表单validation。 按照文档你可以做

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); } } ); 

在App.js中 但是,如果我把app.get('/user', user.index); 我可以把控制器代码放在一个单独的文件中。 我想在validation中间件(或将validation代码放在控制器中)中做同样的事情,以便在开始添加更多页面时,使App.js文件更易于浏览。

有没有办法做到这一点?

基本上我想把app.get('/user', validation.user, user.index);

这是你如何定义你的路线:

routes.js:

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

这是你如何定义你的中间件:

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) 

另一种方法是使用每个路由的中间件:

routes.js:

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

我希望我能回答你的问题。

您可以像使用控制器function一样将中间件function放入单独的模块中。 这只是一个具有适当参数集的导出函数。

所以如果你有一个validation.js文件,你可以添加你的uservalidation方法:

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