[英]Node.js code hints
您好,我想知道我是否對這種代碼正確,以及是否有更好的方法來做到這一點。
有一個獲取主頁的模塊。
app.js:
[...]
// Get homepage
app.get('/', frontend.index);
[...]
frontend.index函數必須從redis中獲取幾個數據obj(util.getRemoteConfig和util.getGlobalStats),並使用它們來呈現Jade模板,因此我做到了。
frontend.js:
[...]
// [GET] Homepage
exports.index = function(req, res){
var remoteConfig = {};
var globalStats = {};
util.getRemoteConfig(function(remoteConfig) {
var version = 'n.a.';
if (remoteConfig.version)
version = remoteConfig.version;
util.getGlobalStats(function(globalStats) {
res.render('index.jade',
{ title: config.items.default_title, version: version, global_stats: JSON.stringify(globalStats) }
);
});
});
};
[...]
util模塊從redis獲取數據並通過回調傳遞數據。
util.js中:
[...]
exports.getRemoteConfig = function(cb) {
client.hget('remote_config', function(err, obj) {
if (err) return cb(err);
// do something with obj and return it
cb(obj);
});
};
exports.getGlobalStats = function(cb) {
client.hgetall("global_stats", function (err, obj) {
if (err) return cb(err);
// do something with obj and return it
cb(obj);
});
};
[...]
這很好,但是真的正確嗎? 我能做些比這更好的嗎?
謝謝任何提示將是有用的。
如果遠程配置和全局統計信息與路由無關,則您應該將它們放入中間件而不是控制器中:
middlewares.js:
exports.remoteConfig = function(req,res,next){
util.getRemoteConfig(function(err,config){
if(err){
return next(err);
}
req._remote_config = config;
return next(null);
});
}
controllers.js:
exports.index = function(req, res){
var remoteConfig = req._remote_config;
var globalStats = req._global_stats;
res.render('index.jade', {
title: config.items.default_title,
version: version,
global_stats: JSON.stringify(globalStats)
};
};
app.js:
app.get('/', middleware.remoteConfig, middleware.globalStats,controllers.index);
要么
app.use(middleware.remoteConfig);
app.use(middleware.globalStats);
是否應將中間件用於所有路由。
注意:該代碼未經測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.