2011-11-18 35 views
5

Xin chào, tôi có cách cụ thể 'thể hiện' để làm cho một số dữ liệu ứng dụng toàn cầu có sẵn cho tất cả tuyến đường của tôi không? Hoặc là một trường hợp chỉ sử dụng câu lệnh module.exports?Express - Chuyển dữ liệu tới tất cả các tuyến đường

Bất kỳ con trỏ nào được hoan nghênh. Nút noob - btw

Trả lời

11

Bạn có thể thiết lập một đối tượng toàn cầu mà cũng có sẵn trong cách bố trí của bạn

app.js

app.configure(function(){ 
    app.set('view options', {pageTitle: ''}) 
} 

app.get('/',function(request, response){ 
    response.app.settings['view options'].pageTitle = 'Hello World' 
    response.render('home') 
}) 

layout.jade

!!! 
html 
    head 
    title= pageTitle 
    body!= body 
7

Bạn có thể sử dụng app.set() trong phần thiết lập của ứng dụng để cung cấp cho mỗi yêu cầu. Đối tượng ứng dụng có sẵn qua req.app trong tuyến đường của bạn.

Cá nhân, tôi muốn thực hiện app.set('name', obj); trong quá trình thiết lập và trong các tuyến đường tôi truy cập thông qua req.app.settings.name.

+1

Bạn có nghĩa là res.app không req.app không phải là? – FireZenk

2

Bạn cũng có thể sử dụng một trợ giúp động để chuyển dữ liệu đến tất cả các chế độ xem.

app.js

// Dynamic Helpers 
app.dynamicHelpers({ 
    appSettings: function(req, res){ 
     return {name:"My App", version:"0.1"}; 
    } 
}); 

Bây giờ trên quan điểm của bạn, bạn có thể sử dụng nó như thế này (tôi đã sử dụng EJS trên ví dụ này nhưng nó sẽ làm việc với ngọc bích hoặc bất kỳ công cụ xem khác):

view.ejs

<%= appSettings.name %> 
<%= appSettings.version %> 

Hope this helps.

+3

Nhược điểm của câu trả lời của bạn là đối với mỗi yêu cầu bạn sẽ xử lý người trợ giúp. Đối với dữ liệu tĩnh như phiên bản, 'app.set ('tùy chọn xem', someData)' là phù hợp hơn. DynamicHelpers dành cho dữ liệu động. – jackdbernier

+0

Điểm tốt! Cảm ơn rất nhiều về lời bình luận của bạn! – FMontano

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