1.根目录/module/config.js

/**
* 配置文件
*/
var app = {
dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb',
dbName: 'koa'
} module.exports = app;

2.根目录/module/db.js

/**
* DB库
*/
var MongoClient = require('mongodb').MongoClient;
var Config = require('./config.js'); class Db {
/**
* 单例
* 解决多次实例化,实例不共享的问题
*/
static getInstance() {
if (!Db.instance) {
Db.instance = new Db();
}
return Db.instance;
} constructor() {
this.dbClient = ''; /*属性 存放db对象*/
// this.connect();
} connect() { /*连接数据库*/
let _that = this;
return new Promise((resolve, reject) => {
if (!_that.dbClient) { /*解决数据库多次连接的问题*/
MongoClient.connect(Config.dbUrl, (err, client) => {
if (err) {
reject(err);
} else {
_that.dbClient = client.db(Config.dbName);
resolve(_that.dbClient);
}
})
} else {
resolve(_that.dbClient);
}
})
} find(collectionName, json) {
return new Promise((resolve, reject) => {
this.connect().then((db) => {
var result = db.collection(collectionName).find(json);
result.toArray((err, docs) => {
if (err) {
reject(err);
return;
}
resolve(docs);
})
})
})
} insert() {
//
}
} // myDb1
// var myDb1 = new Db();
var myDb1 = Db.getInstance(); setTimeout(function () {
console.time('start1');
myDb1.find('user', {}).then(function (data) {
// console.log(data);
console.timeEnd('start1');
})
}, 100); setTimeout(function () {
console.time('start2');
myDb1.find('user', {}).then(function (data) {
// console.log(data);
console.timeEnd('start2');
})
}, 3000); // myDb2
// var myDb2 = new Db();
var myDb2 = Db.getInstance(); setTimeout(function () {
console.time('start3');
myDb2.find('user', {}).then(function (data) {
// console.log(data);
console.timeEnd('start3');
})
}, 5000); setTimeout(function () {
console.time('start4');
myDb2.find('user', {}).then(function (data) {
// console.log(data);
console.timeEnd('start4');
})
}, 7000);

3.效果图

.

koa 基础(二十二)封装 DB 库 --- 测试的更多相关文章

  1. koa 基础(二十三)封装 DB 库 --- 应用

    1.根目录/module/config.js /** * 配置文件 */ var app = { dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceNam ...

  2. koa 基础(十二)koa-static 静态资源中间件 静态web服务

    1.目录 2.app.js /** * koa-static 静态资源中间件 静态web服务 * 1.npm install --save koa-static * 2.const static = ...

  3. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  4. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  5. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

  6. 二十二. Python基础(22)--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  7. (C/C++学习笔记) 二十二. 标准模板库

    二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...

  8. Java 多线程基础(十二)生产者与消费者

    Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...

  9. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento   沿着脚印,走过你来时的路,回到原点.     苦海翻起爱恨   在世间难逃避命运   相亲竟不可接近   或我应该相信是缘份   一首<一生所爱>触动了多少 ...

随机推荐

  1. vue创建项目步骤

    # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project ...

  2. EBS常用表_Dictionary

    EBS常用表:转载于 https://blog.csdn.net/xiariqingcao/article/details/8775827 . OU.库存组织 SELECT hou.organizat ...

  3. ——Java中的collection和collections的区别

    1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Coll ...

  4. SVN主从备份

    SVN主从备份 两套环境:192.168.67.63(主SVN) 192.168.67.60(从SVN) 1.主环境上已经装好SVN并且存在数据仓库/home/svndata在从环境上,新建一/hom ...

  5. 移动端h5+vue失焦搜索,ios和android兼容问题

    html部分: <input type="search" :placeholder="placeholder" v-model="searchN ...

  6. 第三章·MySQL版本区别及管理

    一.MySQL5.6与MySQL5.7安装的区别 1.cmake的时候加入了bostorg 2.初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有 ...

  7. Go语言基础之操作Redis

    Go语言操作Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言如何操作Redis. Redis介绍 Redis是一个开源的内存数据库,Redis提供了5种不同类型的数据结构,很多业 ...

  8. Beta冲刺——星期四

    这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 飞猪们 这个作业的目标 剩余任务预估,分配任务(开发,测试等).按要求提交当天冲刺报告. ...

  9. shutdown immediate 持久无法关闭数据库之解决方案

    问题引出:测试环境,进行oralce的shutdown immediate,等待时间很长,长的无法等待 ORACLE shutdown 过程: 1.shutdown normal(正常关闭方式):阻止 ...

  10. PHP代码执行流程

    怎么样?有点了解了么.说实话,单看这个,我本人是有点懵的,不过,不要怕.咱们来慢慢地看下. 首先,在网上找的信息说PHP代码执行的顺序是这样的,第一步是词法分析,第二步是语法分析,第三步是转化为opc ...