मैंने यह पता लगा लिया। मैंने क्लाइंट के बजाय सभी कार्यों को करने के लिए क्यू लाइब्रेरी का उपयोग किया। मल्टी ()। निष्पादन ()। इसने सभी रेडिस पोस्ट कमांड के एक साफ निष्पादन की अनुमति दी और फिर मुझे जानकारी प्राप्त करने की अनुमति दी।
रूट्स.जेएस फ़ाइल में, मेरे पास केवल एक संक्षिप्त कोड था। सब कुछ डॉक्टरडीबी.जेएस फ़ाइल में निष्पादित होता है।
मार्ग.जेएस
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
};