配置levelDB的存储位置,并扩展一个分页批量查询的方法,默认将数据存储在用户目录下,用户目录根据nodejsOS模块获取,以保证平台兼容性 var level = require('level');var homedir = require('os')
var level = require('level');
var homedir = require('os').homedir();
var db = level(homedir+'/testDB');
/**
* @description 扩展level的查询方法
* @param Boolean opt.keys 是否查询键名 default:true
* @param Boolean opt.values 是否查询键值 default:true
* @param Boolean opt.revers 是否倒叙查询 default:false
* @param Number opt.limit 每次查询的条数
* @param Number opt.pageIndex 当前页数
* @param String opt.prefix 查询关键字
* @param Function opt.callback 回调函数
*/
db.__proto__.select = function(opt){
var defOption = {
keys: true,
values: true,
revers: false,
limit: 20,
pageIndex:0
}
var opt = opt || {};
var limit = 0;
var pageIndex = opt.pageIndex || defOption.pageIndex-1;
if(pageIndex !== 0){
var num = opt.limit || defOption.limit;
limit = num + (num*pageIndex);
}
var option = {
keys: opt.keys || defOption.keys,
values: opt.values || defOption.values,
revers: opt.revers || defOption.revers,
limit: limit,
}
var result = [];
if(opt.prefix){
var prefix = opt.prefix;
var prefixLen = prefix.length;
option.gte = prefix;
option.lte = prefix.subString(0,prefixLen-1)+String.fromCharCode(prefix[prefixLen-1].charCodeAt() + 1);
}
db.createReadStream(option)
.on("data",function(data){
result.push(data);
})
.on('err',function(err){
})
.on('close',function(){
})
.on('end',function(){
if(opt.callback){
if(pageIndex !== 0){
result = result.splice(num*pageIndex,num);
}
opt.callback.call(this,result);
}
})
}
module.exports = db;
