Oto podstawowa konfiguracja. Próbuję utworzyć prosty komponent oprogramowania pośredniego, który pozwoli mi z łatwością przekazywać dane z mojej trasy bezpośrednio do mojego javascript po stronie klienta. (Bardzo podobny do klejnotu Gon w kolorze ruby). Sposób, w jaki to robię to poprzez moduł, który wygląda tak:Czy można dodać dane do obiektu odpowiedzi w module oprogramowania pośredniego w Express.js?
module.exports = function(){
return function(req,res,next){
var app = req.app;
if(typeof(app) == 'undefined'){
var err = new Error("The JShare module requires express");
next(err);
return;
}
res.jshare = {};
app.dynamicHelpers({
includeJShare: function(req,res){
if(typeof(res.jshare) === 'undefined'){
return "";
}
return function(){
return '<script type="text/javascript">window.jshare=' + JSON.stringify(res.jshare) + '</script>';
}
}
});
next();
};
}
Następnie w mojej trasie mogę to zrobić:
exports.index = function(req, res){
res.jshare.person = {firstName : "Alex"};
res.render('index', { title: 'Express' })
};
Wreszcie w layout.jade:
!{includeJShare()}
To, co robi, wypisuje linię klienta javascript na kliencie, która tworzy dokładny obiekt JSON, który został utworzony po stronie serwera.
Oto pytanie; wszystko działa zgodnie z oczekiwaniami, ale będąc nowicjuszem w Express i Node.js ogólnie, byłem po prostu ciekawy, czy przypisywanie właściwości do obiektu odpowiedzi jest w porządku, czy jest coś złego w robieniu tego, że po prostu przeoczam? Z jakiegoś powodu nie spełnia on mojego "testu zapachu", ale nie jestem pewien, dlaczego .....
Dzięki za odpowiedź. Jeśli spojrzysz na próbkę mojego kodu, myślę, że idę o jeden poziom głębiej, mam "res.jshare.person". Czy to miałeś na myśli? – BFree
Tak, właśnie o to mi chodziło. Nie chciałem krytykować twojego kodu, chciałem go tylko podkreślić. Więc zrobiłeś to już poprawne i jshare nie wygląda jak ogólne słowo, które w końcu zostanie użyte przez inną bibliotekę. To jest dobre. :) – hasanyasin
Nie mogę wymyślić żadnego powodu, ale częściej widziałem rzeczy dodane do wniosku. Moc Node i Connect/Express wynika z przekazywania tych obiektów, a każda warstwa rozszerza je w swój własny sposób. Express dodaje na przykład send() do obiektu odpowiedzi. –