mongoskin封装mongdo驱动的调用方式
来源:互联网 发布:修改linux字符集编码 编辑:程序博客网 时间:2024/06/03 07:38
最近在看MEAN框架,在学习过程中想对mongoskin接口再进行一次封装,实现的目标:是数据库连接信息写入配置文件,在实调用过程中不涉及数据库的打开和关闭等操作,具体的封装接口在后续的文章中呈现。封装接口就会涉及到对原接口的了解,但是mongoskin接口的文档又不是很完善,因此就需要对mongodb接口的了解。
先说一下,本文使用的mongoskin的版本号是1.4.13,大家可以参照源码进一步了解。
在index.js文件的末尾36行处exports.db = exports.MongoClient.connect;定义我们连接数据库的db方法(例如:mongo.db('mongodb://localhost/test');),但是这里请注意MongoClient是mongoskin模块定义的MongoClient。
接着在mongo_client.js文件中会创建SkinDb的实例,在实际操作中我们会调用collection方法。在阅读collection方法的源码时,其中会调用collection.open方法(db.js文件的64行处collection.open(callback);),而collection.open方法中又会调用db.open方法(collection.js文件49行处this._skin_db.open(function(err, db)),但是在这两个文件找了半天也没找到open函数。内心苦思冥想,难道是nodejs的prototype是否加下划线的函数同等,这个想法明显是错误的,上网搜索一下无解。灵机一动,加console.log打印,之前的调用流程也是加打印信息跟踪得出的。在db.js文件63行处添加console.log("", collection.open, collection._open);打印信息,注意要输出空字符串,否则输出内容为[Function] [Function]。打印信息输出为:
function (callback) { switch (this._state) { case STATE_OPEN: callback(null, this._native); break; case STATE_OPENNING: this._emitter.once('open', callback); break; default: this._emitter.once('open', callback); this._state = STATE_OPENNING; var self = this; <strong>this._open(function(err, p_native)</strong> { if (err) { self._state = STATE_CLOSE; } else { self._state = STATE_OPEN; self._native = p_native; } self._emitter.emit('open', err, p_native); }); } return this; }function (callback) { var collection_args = this._collection_args.concat([callback]); this._skin_db.open(function(err, db) { if(err) return callback(err); db.collection.apply(db, collection_args); });}对照源码发现collection._open函数时后者,而前者对应utils.js中150行处的open方法。原来在前者函数中会调用_open(因为大多数模块都是基于makeSkinClass类的),这样解释就合理了。后续的代码就好分析了,到此为止吧,不足之处敬请谅解。
- mongoskin封装mongdo驱动的调用方式
- Mongdo的基本操作
- mongoskin查询语句的写法
- CVI调用VC封装WinDriver驱动的DLL
- C#用DllImport方式调用C++封装的dll库
- camera hal调用camera驱动的连接方式
- 封装Lua的调用
- ajax 调用的封装
- 系统调用的封装
- .so的封装调用
- 基于MongoSkin的Promise风格的NodeJS读写MongoDB
- 【事件驱动】【数码管识别】(C++动态链接库的封装和调用)
- 驱动管理类的封装
- .net MongoDb驱动的封装
- linux PCI驱动调用字符设备驱动方式
- vs2008 的lib封装方式
- javascript常见的封装方式
- 多线程调用的封装技巧
- eclipse导入java和android sdk源码,帮助文档
- 浅析C++中的static
- Hadoop 实例16-----MultipleOutputs实战:结果输出到多个文件夹或者文件中
- txz文件格式
- Java猴子吃桃解析
- mongoskin封装mongdo驱动的调用方式
- Servlet 与 JSP 核心编程
- Linux 各目录及每个目录的详细介绍
- LeetCode_OJ【10】Regular Expression Matching
- HDU4616 Game (树形DP/搜索)
- LeetCode_climbing-stairs
- win10 KMS 激活
- C#静态成员与实例成员
- Java二维码编写