我正在使用 HMGET
检索 redis 哈希键的多个字段,以便使用 JSON 简单地发送它们:
redis.HMGET('key', 'name', 'date', // a lot more fields here,
function(err, reply){
res.jsonp({
name: reply[0],
date: reply[1],
// other fields
});
}
);
处理大量字段会导致列表非常长,因此代码可读性较差。所以我想知道:是否有一种更漂亮和通用的方法将 reply
数组映射到 JSON 响应对象 - 最好不必写下两次字段名称?
最佳答案
我不清楚您是否正在获取散列的所有属性,在这种情况下您应该使用 hgetall
返回一个对象。否则,您希望界面看起来像这样:
hmgetObject(redis)('key', 'name', 'date', ..., function (err, reply) {
// Here, reply is already an object
res.jsonp(reply);
});
您会注意到像这样传递 redis 客户端如何让您轻松地重用函数:
var hmget = hmgetObject(redis);
hmget('key1', 'name', 'date', ...);
hmget('key2', 'foo', 'bar', ...);
这是实现,它是通用的并且适用于任意数量的参数):
function hmgetObject (redis) {
return function () {
var args = [].slice.call(arguments, 0),
cb = args.pop();
args.push(map(args.slice(1), cb));
redis.hmget.apply(redis, args);
}
function map (props, cb) {
return function (err, vals) {
if(err) return cb(err);
var obj = {};
for(var i = 0, l = props.length; i < l; i++) {
obj[props[i]] = vals[i];
}
cb(null, obj);
}
}
}
关于javascript - 映射数组到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967901/