2013-02-19 1 views
15

Я новичок во всей работе Node.js, поэтому я все еще пытаюсь понять, как вещи «соединяются».Как поместить промежуточное ПО в собственный файл в Node.js/Express.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);

ответ

33

Это, как вы определяете маршруты:

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

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

+0

Это был подход, который я использовал для каждого маршрута. Спасибо за подробное объяснение – danneth

+2

в этом примере, есть ли один вкладыш для применения всех middlewares.js в app.js? – 4m1r

+0

Только ответ/объяснение по теме, которая имела смысл для меня после пары дней, борющихся с проблемой при обучении node.js. Удивительно. –

1

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

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

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

Да «соответствующий набор параметров» - это трюк :) Я еще не полностью понял связь между экспортом и требованием – danneth

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

  • Нет связанных вопросов^_^