us.mongodb.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /*
  2. nodejs连接monodb业务逻辑模块 解决了mogodb连接数据库返回数据带来的不便
  3. 优化项目有
  4. 1、 nodejs连接数据库死链接
  5. 2、内存占用优化
  6. 3、cpu使用率大量介绍
  7. 4、方便调试测试
  8. 5、代码易读性强
  9. */
  10. //包含mongodb驱动程序
  11. var mongodb = require("mongodb");
  12. //uscookie = require('./us.cookie.js'); //javascript处理Cookie.此处没带命名空间,好像nodejs后台是独立的,主文件usmain.js带了命名空间,以后再考虑。
  13. //mongodb安装位置
  14. //var server = new mongodb.Server('192.168.60.59', 27017, { auto_reconnect: true });
  15. var server = new mongodb.Server('192.168.100.71', 27017, { auto_reconnect: true });
  16. //指定数据库
  17. var db = new mongodb.Db('UseStudio_Develop', server, { safe: true });
  18. //打开数据库,console.log('connect');输出调试信息到控制台
  19. db.open(function (err, db) { if (!err) { console.log('connect'); } else { console.log(err); } });
  20. //尝试写一个通用存储过程。这样后台代码可以极度简单。pArr为参数数组。尝试成功
  21. //以后做后台数据库操作,凡是调用存储过程的,都可以使用统一的解决方案,节约编码,更好控制参数。极度简单编程,
  22. exports.US_CommonPro = function (req, uscookie, pArr, callback) {
  23. var i;//定义循环变量
  24. for (i = 0; i < pArr.length; i++) { pArr[i] = decodeURIComponent(pArr[i]); }//解密中文字符串。
  25. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  26. var _islogin = uscookie.IsloginId(req, pArr[1]); //得到用户是否已经认证的标识。
  27. //所有传递进来的参数后面加一个是否已经登录的标识,由于js参数任意,不会报错,可以省略很多逻辑,在数据库中可以更好发挥作用,比如选取用户,已经登录的选取不了则自动创建。
  28. pArr.push(_islogin); //重要,向数据库追加一个认证参数,有些地方需要使用到,可以节约编码。
  29. //拼凑参数方法
  30. var _pro = "" + pArr[0] + "('"; //命令拼凑
  31. for (i = 1; i < pArr.length; i++) { _pro += pArr[i]; if (i < pArr.length - 1) _pro += "','"; } //拼凑参数
  32. _pro += "')"; //拼凑结束。
  33. console.log(_pro);
  34. //是否有权限执行数据库后续操作
  35. if (US_DB_Pri(req, uscookie, pArr)) {
  36. //console.log(_pro); console.log("" + pArr[0] + "('" + pArr[1] + "')");比较拼凑结果
  37. //db.eval("" + pArr[0] + "('" + pArr[1] + "')", function (err, _json) { //元素调用方法
  38. db.eval(_pro, function (err, _json) { //拼凑调用方法
  39. console.log("US_CommonPro ......");
  40. console.log(_json);
  41. callback(JSON.stringify(_json));
  42. });
  43. }
  44. }
  45. //有些操作需要判断用户登录Cookie.此处作为局部变量还是全局变量??????暂时不管了,以后再看
  46. var _noPri = ["Select_OneUserByID"];//无需判断权限的操作
  47. var _yesPri = ["Add_Folder", "Add_File", "Delete_Folder", "Update_Folder", "Update_FileContent"]; //需要判断Cookie是否有权限的操作。
  48. //参数C为传递进来的存储过程名字,有些存储过程需要权限,有些不需要。
  49. //pArr[0]为存储过程名字,pArr[1]为未认证userid。
  50. //参数req为前台传递进来的请求,参数uscookie为前台传进来的Cookie类。
  51. US_DB_Pri = function (req, uscookie, pArr) {
  52. var i;
  53. //普通选取操作,无需权限。
  54. for (i = 0; i < _noPri.length; i++) if (pArr[0] == _noPri[i]) return true; //无需权限的操作
  55. //需要权限的操作,比如增删改。
  56. for (i = 0; i < _yesPri.length; i++) {
  57. if (pArr[0] == _yesPri[i]) {
  58. if (pArr[pArr.length - 1]) return true; //如果Cookie值匹配,则赋予权限,pArr[pArr.length-1]保存了Cookie值是否匹配的返回值。
  59. else return false; //如果Cookie值不匹配,不赋予权限
  60. }
  61. }
  62. return false;//默认返回没有权限。
  63. }
  64. //-------------------------------------------------------------数据库操作已经封装,以下所有代码无用了,仅仅做为参考------------------------------
  65. //选取数据的示例
  66. exports.select = function (sql, callback) {
  67. db.collection('Develop', { safe: true }, function (err, collection) {
  68. //为啥monogodb返回多条数据不是Json。有点想不通,要先转数组,再转json。而选取一条数据好像不用
  69. //collection.find(function (err, _json) { callback(_json); });
  70. //查找所有数据。
  71. //console.log(collection);
  72. collection.find().toArray(function (err, _json) { callback(JSON.stringify(_json)); })
  73. //根据条件选取数据
  74. //collection.find({ "UserDirectoryName": "自然岩壁" }).toArray(function (err, _json) { callback(JSON.stringify(_json)); })
  75. //根据条件只选取一条数据。为啥取出来的还不是json,还需要转换为json?mongdb需要改写。
  76. //collection.findOne({ "UserDirectoryName": "自然岩壁" }, function (err, _json) { callback(JSON.stringify(_json)); })
  77. });
  78. }
  79. //选取一个指定用户id的用户
  80. exports.SelectOneUserByID = function (sql, userid, callback) {
  81. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  82. //db.eval("testparam('自然岩壁')", function (err, _json) {
  83. db.eval("Select_OneUserByID('" + userid + "')", function (err, _json) {
  84. console.log("SelectOneUserByID ......");
  85. console.log(_json);
  86. callback(JSON.stringify(_json));
  87. });
  88. }
  89. //创建一个项目或者文件夹。
  90. exports.Add_Folder = function (sql, userid, parentid, parentdeep, folderid, foldername, callback) {
  91. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  92. //db.eval("testparam('自然岩壁')", function (err, _json) {
  93. db.eval("Add_Folder('" + userid + "','" + parentid + "','" + parentdeep + "','" + folderid + "','" + foldername + "')", function (err, _json) {
  94. console.log("Add_Folder ......");
  95. callback(JSON.stringify(_json));
  96. });
  97. }
  98. //创建一个文件
  99. exports.Add_File = function (sql, userid, parentid, parentdeep, fileid, filename, callback) {
  100. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  101. //db.eval("testparam('自然岩壁')", function (err, _json) {
  102. db.eval("Add_File('" + userid + "','" + parentid + "','" + parentdeep + "','" + fileid + "','" + filename + "')", function (err, _json) {
  103. console.log("Add_File ......");
  104. callback(JSON.stringify(_json));
  105. });
  106. }
  107. //删除一个项目或者文件夹
  108. exports.Delete_Folder = function (sql, userid, parentdeep, folderid, callback) {
  109. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  110. db.eval("Delete_Folder('" + userid + "','" + parentdeep + "','" + folderid + "')", function (err, _json) {
  111. console.log("Delete_Folder ......");
  112. callback(JSON.stringify(_json));
  113. });
  114. }
  115. //更新一个项目或者文件夹
  116. exports.Update_Folder = function (sql, userid, parentdeep, folderid, foldername, callback) {
  117. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  118. db.eval("Update_Folder('" + userid + "','" + parentdeep + "','" + folderid + "','" + foldername + "')", function (err, _json) {
  119. console.log("Update_Folder ......");
  120. callback(JSON.stringify(_json));
  121. });
  122. }
  123. //更新一个文件的内容
  124. exports.Update_FileContent = function (sql, userid, parentdeep, fileid, filecontent, callback) {
  125. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  126. db.eval("Update_FileContent('" + userid + "','" + parentdeep + "','" + fileid + "','" + filecontent + "')", function (err, _json) {
  127. console.log("Update_FileContent ......");
  128. console.log(_json);
  129. callback(JSON.stringify(_json));
  130. });
  131. }
  132. exports.Operating = function (ele, callback) {
  133. db.eval('Operating("' + ele + '")', function (err, _json) {
  134. console.log(_json);
  135. console.log(err);
  136. callback(JSON.stringify(_json));
  137. });
  138. }
  139. //存储过程示例,带参数
  140. exports.testparam = function (sql, callback) {
  141. var _param = "自然岩壁";
  142. console.log(_param);
  143. //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
  144. //db.eval("testparam('自然岩壁')", function (err, _json) {
  145. db.eval("testparam('"+_param+"')", function (err, _json) {
  146. console.log(_json);
  147. callback(JSON.stringify(_json));
  148. });
  149. }
  150. exports.Modify = function (ele, callback) {
  151. console.log(ele);
  152. db.eval('DOP_modifyedit("' + ele + '")', function (err, _json) {
  153. console.log(_json);
  154. console.log(err);
  155. callback(JSON.stringify(_json));
  156. callback(JSON.stringify(err));
  157. });
  158. }
  159. //封装数据库连接,暂时不做。以后再看
  160. /*BlogProvider = function (host, port, database) {
  161. //指定服务器
  162. this.server = new mongodb.Server(host, port, { safe: false }, { auto_reconnect: true }, {});
  163. //指定数据库
  164. this.db = new mongodb.Db(database, this.server);
  165. //打开连接
  166. this.db.open(function (err, db) { if (!err) { console.log('connect'); } else { console.log(err); } });
  167. }
  168. BlogProvider.prototype.proselect = function (sql, callback) {
  169. db.eval("testpro()", function (err, _json) {console.log(_json);callback(JSON.stringify(_json));});}
  170. exports.BlogProvider = BlogProvider;*/