LowDB Code Reading

main.js

主入口点,里面先注册了一个自己的Lodash示例


  // Create a fresh copy of lodash
  const _ = lodash.runInContext()
  const db = _.chain({})

这里的chain创建了一个空的链式对象,从而让db继承了所有的lodash内置方法。

后面进一步改写了_.prototype,在上面加入了一些lowdb自己的方法,数据库的CRUD等等。

adapters/Base.js

这些Adapters是用来对接底层数据存储格式的。支持的包括File的Async,Sync,LocalStorage,Memory四种。

里面代码非常短,如下:


class Base {
  constructor(
    source,
    { defaultValue = {}, serialize = stringify, deserialize = JSON.parse } = {}
  ) {
    this.source = source
    this.defaultValue = defaultValue
    this.serialize = serialize
    this.deserialize = deserialize
  }
}

这里就是注册了一下一个接口(用Javascript的方式)。其实如果是Typescript,就可以直接操interface了,然后让这些Adapter实现这个接口。这里的实现略显Hack了一点。

adapters/FileSync.js

没什么好说的,非常暴力的包装,然后用了graceful-fs取代原有的fs

序列化就是本质的JSON.stringnifyJSON.parse

总结

那就是Lodash真好用。