2013-02-19 23 views
15

Tôi mới làm quen với toàn bộ điều Node.js, vì vậy tôi vẫn cố gắng tìm hiểu cách mọi thứ "kết nối".Cách đặt phần mềm trung gian vào tệp riêng của nó trong Node.js/Express.js

Tôi đang cố gắng sử dụng xác thực express-form. Theo tài liệu bạn có thể làm

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

    } 
    } 
); 

Trong App.js. Tuy nhiên nếu tôi đặt một cái gì đó như app.get('/user', user.index); tôi có thể đặt mã điều khiển trong một tập tin riêng biệt. Tôi muốn làm điều tương tự với phần mềm trung gian xác thực (hoặc đặt mã xác nhận trong bộ điều khiển) để làm cho tệp App.js dễ dàng hơn với tổng quan khi tôi bắt đầu thêm nhiều trang hơn.

Có cách nào để thực hiện việc này không?

Về cơ bản tôi muốn đặt một cái gì đó giống như app.get('/user', validation.user, user.index);

Trả lời

33

Đây là cách bạn xác định tuyến đường của bạn:

routes.js:

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

Đây là cách bạn xác định phần giữa của mình:

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) 

Một cách khác là sử dụng middleware của bạn mỗi tuyến đường:

routes.js :

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

Tôi hy vọng tôi trả lời câu hỏi của bạn.

+0

Đó là phương pháp tiếp cận theo từng tuyến đường mà tôi đã theo dõi. Cảm ơn bạn đã giải thích rộng rãi – danneth

+2

trong ví dụ này, có một lớp lót để áp dụng tất cả middlewares.js trong app.js không? – 4m1r

+0

Chỉ trả lời/giải thích về chủ đề có ý nghĩa đối với tôi sau một vài ngày đấu tranh với vấn đề khi tìm hiểu node.js. Kinh ngạc. –

1

Bạn có thể đặt các chức năng trung vào một mô-đun riêng biệt trong cách chính xác giống như bạn làm cho các chức năng điều khiển. Nó chỉ là một hàm được xuất khẩu với tập hợp các tham số thích hợp.

Vì vậy, nếu bạn đã có một tập tin validation.js, bạn có thể thêm phương pháp user xác nhận của bạn như:

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

vâng "tập hợp các thông số thích hợp" là lừa :) Tôi chưa nắm bắt được mối quan hệ xuất/yêu cầu chưa – danneth