ES6封装数据库操作模块
2018-08-18 本文已影响0人
晓妆初了明肌雪
使用ES6的方式来封装一个数据库操作模块,目的是更快、更小、更方便
本文重点考察在优化数据库查询效率,一方便是优化连接数据库的时间,另一方便是优化实例化对象所花费的时间。
1.导入mongodb、assert模块,声明mogodb的url,声明数据库名字
![](https://img.haomeiwen.com/i12355402/8819f3d5ffd987cc.png)
2.创建一个类Db,由于connect()和find()是平级关系,且都是异步操作,如果想在find中拿到connect()中的数据库名称,需要使用return Promise()对象进行传值。
![](https://img.haomeiwen.com/i12355402/5929581e89355a95.png)
![](https://img.haomeiwen.com/i12355402/f9e683c7c15e1186.png)
3.但是由于查找数据中又再一次调用了connect()方法,这样就再一次连接了数据库,因此就又花费了一些时间,从而降低了效率。为了节省连接数据库花费的时间。可以找一个中间者,进行判断监听。
①创建一个构造函数,在构造函数中初始化这个中间者this._mgdb=null。
![](https://img.haomeiwen.com/i12355402/386528cf0af9ff1d.png)
②在connect()中的Promise类中进行判断,如果已经连接就使用之前的状态,如果没有连接,就重新连接。
![](https://img.haomeiwen.com/i12355402/b2af3a192390fd15.png)
![](https://img.haomeiwen.com/i12355402/c1b8f04f1e244bd5.png)
4.由于每次需要调用Db里面的方法,都需要实例化一个对象才能调用(因为Db里面的方法是动态方法,动态方法只能对象调用,所以需要先实例化),为了优化每次都需要实例化的操作,可以采用单例方法(声明一个静态方法,在静态方法中进行判断,如果没有则new一个对象出来,如果有,直接调用该静态方法即可(静态方法类可以直接调用,节省了实例化对象的操作!)
![](https://img.haomeiwen.com/i12355402/d9d4d5d4fd52c05c.png)
![](https://img.haomeiwen.com/i12355402/5f239af11b25fcf1.png)