2013-02-19 8 views
15

Jestem nowy w całej sprawie Node.js, więc wciąż próbuję zrozumieć, jak rzeczy "łączą się".Jak umieścić oprogramowanie pośrednie w swoim pliku w Node.js/Express.js

Próbuję użyć sprawdzania poprawności express-form. Zgodnie z dokumentacją można wykonać następujące czynności:

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

    } 
    } 
); 

W App.js. Jednak jeśli umieściłem coś w rodzaju app.get('/user', user.index);, mogę umieścić kod kontrolera w oddzielnym pliku. Chciałbym zrobić to samo z oprogramowaniem pośredniczącym do sprawdzania poprawności (lub umieścić kod sprawdzania poprawności w kontrolerze), aby ułatwić przeglądanie pliku App.js po rozpoczęciu dodawania kolejnych stron.

Czy istnieje sposób, aby to osiągnąć?

Zasadniczo chciałbym umieścić coś jak app.get('/user', validation.user, user.index);

Odpowiedz

33

W ten sposób można określić swoje trasy:

routes.js:

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

Oto jak definiujesz swoje middleware:

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) 

Innym sposobem byłoby używać middleware na trasie:

routes.js :

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

Mam nadzieję, że odpowiem na twoje pytania.

+0

To było podejście na trasie, po którym byłem. Dzięki za obszerne wyjaśnienie – danneth

+2

w tym przykładzie, czy istnieje jeden liner do zastosowania wszystkich middlewares.js w app.js? – 4m1r

+0

Tylko odpowiedź/wyjaśnienie na temat, który miał dla mnie sens po kilku dniach borykania się z problemem podczas nauki node.js. Niesamowity. –

1

Można umieścić funkcje middleware do osobnego modułu w dokładnie taki sam sposób, jak to zrobić dla funkcji kontrolera. To tylko wyeksportowana funkcja z odpowiednim zestawem parametrów.

Więc jeśli miał plik validation.js, można dodać metodę user walidacji jako:

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

tak "odpowiedni zestaw parametrów" to sztuczka :) Nie do końca zrozumiałem związek eksport/wymaganie jeszcze – danneth

Powiązane problemy