koa 基础(二十二)封装 DB 库 --- 测试
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 库 --- 测试的更多相关文章
- koa 基础(二十三)封装 DB 库 --- 应用
1.根目录/module/config.js /** * 配置文件 */ var app = { dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceNam ...
- koa 基础(十二)koa-static 静态资源中间件 静态web服务
1.目录 2.app.js /** * koa-static 静态资源中间件 静态web服务 * 1.npm install --save koa-static * 2.const static = ...
- JAVA基础知识总结:一到二十二全部总结
>一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- Bootstrap <基础二十二>超大屏幕(Jumbotron)
Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- (C/C++学习笔记) 二十二. 标准模板库
二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...
- Java 多线程基础(十二)生产者与消费者
Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...
- 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)
备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少 ...
随机推荐
- Phoenix实现分页查询
1 利用offset语法,官网的语法 ELECT * FROM TEST LIMIT 1000; SELECT * FROM TEST LIMIT 1000 OFFSET 100; 2 公式如下 SE ...
- 数据库——Oracle(1)
1 Oracle数据库:ORACLE数据库系统是美国ORACLE(甲骨文)研发并提供的款关系型数据库管理系统,占据市场的主要的份额. 目前常用版本:Oracle9i,Oracle10g,Oracle1 ...
- OI视角浅谈布隆过滤器
简要谈及布隆过滤器 Preface 不负责的出题人扔了一道5e5,2M卡内存的题,标算布隆过滤器,然而std自己用std::set 70M碾过去了. 没学OI时候草草看过这个,不过忘得差不多了. 今天 ...
- 原生 JS实现一个简单分页插件
最近做的一个 PC端的需求,这个需求中有一个小点,页面底部有一块列表区域,这个列表的数据量比较大,需要进行分页控制,切换页码的时候,发送一个 ajax请求,在页面无刷新的情况下,实现列表数据的刷新,所 ...
- php类相关知识----抽象类
<?php //抽象类存在的目的是被继承,而不是用来被实现 abstract class wenwajiao { //抽象类中一定要有抽象方法,而且一定要被实现 abstract public ...
- Pycharm2019最新激活码
激活pycharm的方法有很多,一种是使用最新的激活码,另一种是使用破解补丁的方式(可以长期使用) pycharm2019最新激活码: 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4M ...
- Chrome报错提示Unchecked runtime.lastError: The message port closed before a response was received.
经过查询,此错误是Chrome扩展插件引起的.由于Chrome修改了API接口,原来的请求被拦截.(Chrome 73 onwards disallows cross-origin requests ...
- 题解 【POJ1952】 BUY LOW, BUY LOWER
题目意思: 给你一个长度为\(n\)(\(1<=n<=5000\))的序列,并求出最长下降子序列的长度及个数, 并且,如果两个序列中元素的权值完全相同,那么即使它们的位置不一样,也只算一种 ...
- input框输入手机号码分隔显示
在input框输入手机号码时,自动加入空格按照3,4,4位显示,如: 实现方法如下: <label>手机号码</label><input type="text& ...
- windows查看服务的状态
方法一:运行窗口操作 按下win+r键,在运行窗口中输入services.msc,点击[确定]按钮,即可打开服务. 如下图所示: 方法二:按部就班 1)此电脑—右键—管理 2)点击[服务和应用程序]按 ...