us.mongodb.js 9.7 KB

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