sql >> データベース >  >> NoSQL >> Redis

Express Node.JS-Redisコールバックを受信し、promiseを実行します

    私はこれを理解しました。 client.multi()。exec()の代わりに、Qライブラリを使用してすべての関数を実行しました。これにより、すべてのredis postコマンドをクリーンに実行できるようになり、情報を取得できるようになりました。

    ルート.jsファイルには、ほんの少しのコードしかありませんでした。すべてがdoctorDB.jsファイルで実行されます。

    routers.js

    app.post('/addDoctorInfo', ensureLoggedIn('/login'), function(req, res, next){
            return doctorDB.addDoctor(req.body.id, req.body.doc, req, res, next);
    });
    

    doctorDB.js

    var addDoctor = function addDoctor(id, doc, req, res, next){
        var fields = Object.keys(doc.fields);
    
        function middleName(id, doc){
            if (doc.middleName){ return client.hset(id, "middleName", doc.middleName); }
            else { return; }
        }
    
        return Q.all([Q.ninvoke(client, 'sadd', 'Doctors', id),
                        Q.ninvoke(client, 'hmset', id, "lastName", doc.lastName, "firstName", doc.firstName, "email", doc.email, "university", doc.university, "work", doc.work),
                        Q.ninvoke(client, 'sadd', id + ':fields', fields),
                        middleName(id, doc)]).then(function(x){
                            return getInfo(id, req, res, next);;
                        }, function (err) { res.status(404); });
    };
    

    これは、クライアント側に応答を送信する関数getInfo()に渡されます:

    var redisHGetAll = Q.nbind(client.hgetall, client);
    
    var getInfo = function getInfo(id, req, res, next){
        return redisHGetAll(id).then(function(x){
            return findByMatchingProperties(x);
        }, function (err) { res.status(404); }).then(function(){
            return client.smembers(id + ':fields', function(err, reply){
                data['fields'] = reply;
                res.setHeader('Content-Type', 'application/json');
                res.end(JSON.stringify(data));
            });
        }, function (err) { res.status(404); })
    };
    
    function findByMatchingProperties(x) {
        for (var y in x){
            checkData(y, x[y]);
        }       
    
        function checkData(y, z){
            for (var d in data){
                if (d === y){
                    data[d] = z;
                }
            }
        }
    }
    
    var data = {
        lastName: null,
        firstName: null,
        middleName: null,
        email: null,
        university: null,
        work: null,
        fields: null
    };
    



    1. C#ドライバーを介してmongodbシェルスクリプトを実行します

    2. 日時のフィールドごとに最新のMongoDBレコードを取得する

    3. サンプルのhbaseテーブルをすばやく作成する

    4. useMongoClient(Mongoose 4.11.0)を設定するにはどうすればよいですか?