[Help] Xin hỏi cách pass data to layout (pugjs + nodejs)



  • Em mới học node js và pugjs, em có thắc mắc nhờ mọi người giúp đỡ
    Em có thanh Left menu trong layout.pug, có cách nào lấy dữ liệu từ database đổ vào Left menu đó 1 lần ko ạ. Vì em tìm hiểu chỉ có cách truyền vào route qua view thôi ạ.
    Ví dụ em vào trang index => model render ra sẽ phải chứa thêm cả dữ liệu này, tức là bất kỳ giao diện nào cũng phải xử lý như thế, mà em ko tìm cách nào xử lý theo kiểu qua 1 base class.
    Mong mọi người giúp đỡ ạ!



  • nếu dùng express thì bạn có override hàm render

    app.use(function(req, res, next) {
    	return (function(render) {
    		res.render = function(view, options, callback) {
    			var self = this,
    				options = options || {},
    				req = self.req;
    
    			if (typeof options == 'function') {
    				callback = options;
    				// options = {};
    				// chèn db menu ở đây
    				options = {
    					menu: ...
    				}
    			}
    
    			if (typeof callback != 'function') {
    				callback = function(err, outHtml) {
    					if (err) return req.next(err);
    					self.send(outHtml);
    				};
    			}
    
    			render.call(self, view, options, function(err, str) {
    				callback(err, str);
    			});
    		};
    		next();
    	})(res.render);
    });
    

    vì layout nào cũng có menu và cần Db nên bạn nên cache Db liên quan đến menu vào memory, tránh phải query nhiều lần tới Db.


Log in to reply