Как поместить промежуточное программное обеспечение в его собственный файл в Node.js/Express.js

Я новичок во всей работе Node.js, поэтому я все еще пытаюсь понять, как вещи "соединяются".

Я пытаюсь использовать проверку express-form. В соответствии с документами вы можете сделать

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);, я могу поместить код контроллера в отдельный файл. Я хотел бы сделать то же самое с промежуточным программным обеспечением проверки (или поставить код проверки в контроллере), чтобы упростить просмотр файла App.js после того, как я начну добавлять дополнительные страницы.

Есть ли способ сделать это?

В принципе, я хотел бы добавить что-то вроде app.get('/user', validation.user, user.index);

Ответы

Ответ 1

Вот как вы определяете свои маршруты:

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){...})
}

Надеюсь, я отвечу на ваши вопросы.

Ответ 2

Вы можете поместить функции промежуточного программного обеспечения в отдельный модуль точно так же, как и для функций контроллера. Это просто экспортированная функция с соответствующим набором параметров.

Итак, если у вас есть файл validation.js, вы можете добавить свой метод проверки user как:

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