Redis
 sql >> база данни >  >> NoSQL >> Redis

Express Node.JS - Получаване на обратно извикване на Redis, изпълнение на обещания

Разбрах това. Използвах библиотеката Q за изпълнение на всички функции вместо client.multi().exec(). Това позволи чисто изпълнение на всички команди на redis post и след това ми позволи да извлека информацията.

Във файла routes.js имах само кратък код. Всичко се изпълнява във файла doctorDB.js.

routes.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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Паралелност на Redis INCR

  2. spring session redis 'Не е дефиниран боб с име 'springSessionRepositoryFilter''

  3. Как да приложите транзакция с връщане назад в Redis

  4. Комуникация между два Docker контейнера на macOS 10.12

  5. Как да използвам redis PUBLISH/SUBSCRIBE с nodejs, за да уведомявам клиентите, когато стойностите на данните се променят?