簡體   English   中英

Node.js代碼提示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM