首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js代码提示

Node.js代码提示
EN

Stack Overflow用户
提问于 2014-08-04 12:30:45
回答 1查看 80关注 0票数 0

你好,我想知道我对这类代码是否正确,以及是否有更好的方法。

有一个模块来获取主页。

app.js:

代码语言:javascript
复制
[...]
// Get homepage
app.get('/', frontend.index);
[...]

frontend.index函数必须从redis (util.getRemoteConfig和util.getGlobalStats)获取几个数据obj,并使用它们来呈现Jade模板,所以我这样做了。

frontend.js:

代码语言:javascript
复制
[...]
// [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:

代码语言:javascript
复制
[...]
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);
    });
};
[...]

这个很好,但真的正确吗?我能做点比这更好的事吗?

谢谢,任何提示都是有用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-04 12:47:04

如果远程配置和全局统计数据与路由无关,则应该将它们放在中间程序中而不是控制器中:

middlewares.js:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
app.get('/', middleware.remoteConfig, middleware.globalStats,controllers.index);

代码语言:javascript
复制
app.use(middleware.remoteConfig);
app.use(middleware.globalStats);

如果中间件应该用于所有路由。

注意:代码未经测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25118745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档