2012-09-24 135 views
6

Tôi đang sử dụng express3.0rc2. Cách sử dụng app.locals.use (hiện tại nó vẫn tồn tại) và res.locals.useexpress 3.0 cách sử dụng app.locals.use và res.locals.use

Tôi thấy điều này https://github.com/visionmedia/express/issues/1131 nhưng app.locals.use ném một lỗi. Tôi giả định rằng một khi tôi đặt chức năng trong app.locals.use tôi có thể sử dụng nó trong các tuyến đường.

Tôi đã nghĩ đến việc thêm

app.locals.use(myMiddleware(req,res,next){res.locals.uname = 'fresh'; next();}) 

và sau đó trong bất kỳ cuộc gọi đường middleware này

nhờ

Trả lời

8

Nếu tôi hiểu bạn một cách chính xác, bạn có thể làm như sau:

app.configure(function(){ 
    // default express config 
    app.use(function (req, res, next) { 
    req.custom = "some content"; 
    next(); 
    }) 
    app.use(app.router); 
}); 

app.get("/", function(req, res) { 
    res.send(req.custom) 
}); 

Bây giờ bạn có thể sử dụng biến req.custom trong mọi tuyến đường. Hãy chắc chắn rằng bạn đặt chức năng app.use trước router!

Edit:

ok thử tiếp theo :) bạn có thể sử dụng trung gian của bạn và xác định nó trong các tuyến đường bạn muốn:

function myMiddleware(req, res, next) { 
    res.locals.uname = 'fresh'; 
    next(); 
} 

app.get("/", myMiddleware, function(req, res) { 
    res.send(req.custom) 
}); 

hoặc bạn có thể thiết lập nó "toàn cầu":

app.locals.uname = 'fresh'; 

// which is short for 

app.use(function(req, res, next){ 
    res.locals.uname = "fresh"; 
    next(); 
}); 
+0

không, tôi muốn gọi chức năng trên các tuyến đường khác nhau và tôi giả định app.locals sẽ giúp tôi làm điều đó – coool

+0

đã chỉnh sửa câu trả lời của tôi – zemirco

+0

cảm ơn. nhưng nếu bạn kiểm tra liên kết github mà tôi gửi có myMiddleware đang được định nghĩa và sau đó một cuộc gọi đến app.locals.use (myMiddleware) từ bây giờ trên chức năng định tuyến có thể gọi myMiddleware. nhưng tôi không thể làm điều đó vì app.locals.use ném một lỗi. và khái niệm là gì với res.locals.use (tôi hiểu res.locals) .. cảm ơn một lần nữa – coool

10

Tôi đang sử dụng Express 3.0 và công trình này cho tôi:

app.use(function(req, res, next) { 
    res.locals.myVar = 'myVal'; 
    res.locals.myOtherVar = 'myOtherVal'; 
    next(); 
}); 

Sau đó tôi có quyền truy cập vào myValmyOtherVal trong các mẫu của tôi (hoặc trực tiếp qua res.locals).

+1

tôi hiểu res.locals nhưng whats up với res.locals.use .. ?? – coool

+0

'res.locals' được sử dụng đơn giản để chuyển các giá trị cho một mẫu. 'res.locals.use' không được xác định trừ khi bạn gán nó. Hãy xem https://github.com/visionmedia/express/blob/master/lib/response.js#L708 –

+1

Tôi thấy bối rối bởi câu lệnh "Tôi có quyền truy cập vào ** myVal ** và ** myOtherVal * * "bởi vì tôi nghĩ nó có nghĩa là bạn chỉ có thể làm một cái gì đó như' myVar + = 'anotherString'', nhưng thực sự bạn vẫn sẽ phải có ** res.locals. ** phần tức là 'res.locals.myVar + =' anotherString''. sau đó nó sẽ làm việc –

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