2012-01-06 38 views
11

Tôi muốn thực hiện một bộ lọc như đường ray trước khi lọc trên express.js. Tôi có một tệp có tên photo.js nơi tôi đang đặt tất cả các tuyến đường liên quan đến ảnh của tôi trên đó. Nhưng tôi cần phải chuyển hướng người dùng không được xác thực trên hệ thống của tôi đến trang đăng nhập. Tôi muốn làm một beforeFilter như vậy thì tôi không cần phải đặt logic rằng trong tất cả các tuyến đường của tôi ...Bộ lọc trên express.js

Cảm ơn

Trả lời

14

Nếu bạn muốn giữ mọi thứ trong tệp photo.js, tôi nghĩ cách tiếp cận tốt hơn là sử dụng app.all và chuyển nhiều cuộc gọi lại (hoạt động như phần mềm trung gian trong định tuyến) được tích hợp vào định tuyến ứng dụng. Ví dụ:

app.all('/photo/*', requireAuthentication, loadUser); 

app.get('/photo/view', function(req, res) { 
    res.render('photo_view'); 
}); 

app.get('/photo/list', function(req, res) { 
    res.render('photo_list'); 
}); 

Trường hợp requireAuthenticationloadUser là các chức năng.

Hãy tìm kiếm tài liệu cho app.VERB và app.all tại http://expressjs.com/api.html#app.all

+0

Sử dụng 'all' là một cách tiếp cận tuyệt vời. Tôi đang sử dụng nó trên đầu trang của 'express-'resource cho các tuyến đường của tôi, và nó khen ngợi nó rất tốt để xác thực và ủy quyền. – JohnnyCoder

3

Có phần mở rộng hoặc các khuôn khổ cấp cao hơn như express-resource.

+0

Làm thế nào để thể hiện tài nguyên giúp trong chuỗi trách nhiệm/bộ lọc như vấn đề ở đây? Về cơ bản github không đưa ra bất kỳ ví dụ nào, bạn có một ví dụ? –

3

Khái niệm đường ray before_filter ánh xạ chặt chẽ với khái niệm phần mềm trung gian từ kết nối, là một phần của express. Bạn có thể thiết lập thủ công này bằng cách đặt trước từng tuyến liên quan đến ảnh với chức năng xác thực của bạn hoặc sử dụng thứ gì đó cao cấp như TJ đã đề cập. Để làm điều đó bằng tay sẽ chỉ là một vấn đề của một cái gì đó như thế này (pseudo-coffeescript)

myAuthMiddleware = (req, res, next) -> 
    if not req.session.user? 
    res.redirect "/" 
    else 
    next() 

editPhoto = (req, res) -> 
    .... 

deletePhoto = (req, res) -> 
    .... 

app.use(myAuthMiddleware, func) for func in [editPhoto, deletePhoto] 

gì được nói là sử dụng myAuthMiddleware như một before_filter cho các chức năng editPhotodeletePhoto middleware.

Các vấn đề liên quan