当前位置 : 主页 > 网络编程 > JavaScript >

LevelDB 基础封装——参考一介布衣博客公开代码并修改

来源:互联网 收集:自由互联 发布时间:2021-06-28
配置levelDB的存储位置,并扩展一个分页批量查询的方法,默认将数据存储在用户目录下,用户目录根据nodejsOS模块获取,以保证平台兼容性 var level = require('level');var homedir = require('os')
配置levelDB的存储位置,并扩展一个分页批量查询的方法,默认将数据存储在用户目录下,用户目录根据nodejsOS模块获取,以保证平台兼容性
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;
网友评论