Dbopt.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /**
  2. * Created by Administrator on 2015/4/18.
  3. */
  4. var url = require('url');
  5. //加密类
  6. var crypto = require("crypto");
  7. var mongoose = require('mongoose');
  8. var shortid = require('shortid');
  9. var Message = require('./Message');
  10. var AdminUser = require("./AdminUser");
  11. var UserNotify = require("../models/UserNotify");
  12. var Content = require("../models/Content");
  13. var ContentCategory = require("../models/ContentCategory");
  14. var ContentTemplate = require("../models/ContentTemplate");
  15. var Ads = require("../models/Ads");
  16. //站点配置
  17. var settings = require("../models/db/settings");
  18. var db = mongoose.connect(settings.URL);
  19. //mongoose.connect('mongodb://'+settings.USERNAME+':'+settings.PASSWORD+'@'+settings.HOST+':'+settings.PORT+'/'+settings.DB+'');
  20. //信息删除操作
  21. var DbOpt = {
  22. del : function(obj,req,res,logMsg){
  23. var params = url.parse(req.url,true);
  24. var targetId = params.query.uid;
  25. if(shortid.isValid(targetId)){
  26. obj.remove({_id : params.query.uid},function(err,result){
  27. if(err){
  28. res.end(err);
  29. }else{
  30. console.log(logMsg+" success!");
  31. res.end("success");
  32. }
  33. })
  34. }else{
  35. res.end(settings.system_illegal_param);
  36. }
  37. },
  38. findAll : function(obj,req,res,logMsg){//查找指定对象所有记录
  39. obj.find({}, function (err,result) {
  40. if(err){
  41. res.next(err);
  42. }else{
  43. console.log(logMsg+" success!");
  44. return res.json(result);
  45. }
  46. })
  47. },
  48. findOne : function(obj,req,res,logMsg){ //根据ID查找单条记录
  49. var params = url.parse(req.url,true);
  50. var targetId = params.query.uid;
  51. if(shortid.isValid(targetId)){
  52. obj.findOne({_id : targetId}, function (err,result) {
  53. if(err){
  54. res.next(err);
  55. }else{
  56. console.log(logMsg+" success!");
  57. return res.json(result);
  58. }
  59. })
  60. }else{
  61. res.end(settings.system_illegal_param);
  62. }
  63. },
  64. updateOneByID : function(obj,req,res,logMsg){
  65. var params = url.parse(req.url,true);
  66. var targetId = params.query.uid;
  67. if(shortid.isValid(targetId)){
  68. var conditions = {_id : targetId};
  69. req.body.updateDate = new Date();
  70. var update = {$set : req.body};
  71. obj.update(conditions, update, function (err,result) {
  72. if(err){
  73. res.end(err);
  74. }else{
  75. console.log(logMsg+" success!");
  76. res.end("success");
  77. }
  78. })
  79. }else{
  80. res.end(settings.system_illegal_param);
  81. }
  82. },
  83. addOne : function(obj,req,res){
  84. var newObj = new obj(req.body);
  85. newObj.save(function(err){
  86. if(err){
  87. res.end(err);
  88. }else{
  89. res.end("success");
  90. }
  91. });
  92. },
  93. pagination : function(obj,req,res,conditions){
  94. var params = url.parse(req.url,true);
  95. var startNum = (params.query.currentPage - 1)*params.query.limit + 1;
  96. var currentPage = Number(params.query.currentPage);
  97. var limit = Number(params.query.limit);
  98. var pageInfo;
  99. // 根据条件查询记录(如果有条件传递,则按条件查询)
  100. var query;
  101. if(conditions && conditions.length > 1){
  102. query=obj.find().or(conditions);
  103. }
  104. else if(conditions){
  105. query=obj.find(conditions);
  106. }
  107. else{
  108. query=obj.find({});
  109. }
  110. query.sort({'date': -1});
  111. if(obj === Message){
  112. query.populate('author').populate('replyAuthor').populate('adminAuthor');
  113. }else if(obj === AdminUser){
  114. query.populate('group');
  115. }else if(obj === UserNotify){
  116. query.populate('user').populate('notify');
  117. }else if(obj === Content){
  118. query.populate('category').populate('author');
  119. }else if(obj === ContentCategory){
  120. query.populate('contentTemp');
  121. }else if(obj === ContentTemplate){
  122. query.populate('items');
  123. }else if(obj === Ads){
  124. query.populate('items');
  125. }
  126. query.exec(function(err,docs){
  127. if(err){
  128. console.log(err)
  129. }else {
  130. pageInfo = {
  131. "totalItems" : docs.length,
  132. "currentPage" : currentPage,
  133. "limit" : limit,
  134. "startNum" : Number(startNum)
  135. };
  136. return res.json({
  137. docs : docs.slice(startNum - 1,startNum + limit -1),
  138. pageInfo : pageInfo
  139. });
  140. }
  141. })
  142. },
  143. getPaginationResult : function(obj,req,res,q,filed){// 通用查询,带分页,注意参数传递格式,filed为指定字段
  144. var searchKey = req.query.searchKey;
  145. var page = parseInt(req.query.page);
  146. var limit = parseInt(req.query.limit);
  147. if (!page) page = 1;
  148. if (!limit) limit = 15;
  149. var order = req.query.order;
  150. var sq = {}, Str, A = 'problemID', B = 'asc';
  151. if (order) { //是否有排序请求
  152. Str = order.split('_');
  153. A = Str[0]; B = Str[1];
  154. sq[A] = B; //关联数组增加查询条件,更加灵活,因为A是变量
  155. } else {
  156. sq.date = -1; //默认排序查询条件
  157. }
  158. var startNum = (page - 1)*limit;
  159. var resultList;
  160. var resultNum;
  161. if(q && q.length > 1){ // 多条件只要其中一条符合
  162. resultList = obj.find({'state':true}).or(q,filed).sort(sq).skip(startNum).limit(limit);
  163. resultNum = obj.find({'state':true}).or(q,filed).count();
  164. }else{
  165. resultList = obj.find(q,filed).sort(sq).skip(startNum).limit(limit);
  166. resultNum = obj.find(q,filed).count();
  167. }
  168. // 分页参数
  169. var pageInfo = {
  170. "totalItems" : resultNum,
  171. "currentPage" : page,
  172. "limit" : limit,
  173. "startNum" : startNum +1,
  174. "searchKey" : searchKey
  175. };
  176. var datasInfo = {
  177. docs : resultList,
  178. pageInfo : pageInfo
  179. };
  180. return datasInfo;
  181. },
  182. getDatasByParam : function(obj,req,res,q){// 通用查询list不带分页,注意参数传递格式,通过express-promise去掉了回调方式返回数据
  183. // 默认查询所有记录,有条件顺带排序和查询部分记录
  184. var order = req.query.order;
  185. var limit = parseInt(req.query.limit);
  186. var sq = {}, Str, A = 'problemID', B = 'asc';
  187. if (order) { //是否有排序请求
  188. Str = order.split('_');
  189. A = Str[0]; B = Str[1];
  190. sq[A] = B; //关联数组增加查询条件,更加灵活,因为A是变量
  191. } else {
  192. sq.date = -1; //默认排序查询条件
  193. }
  194. if(!limit){
  195. return obj.find(q).sort(sq);
  196. }else{
  197. return obj.find(q).sort(sq).skip(0).limit(limit);
  198. }
  199. },
  200. getKeyArrByTokenId : function(tokenId){
  201. var newLink = DbOpt.decrypt(tokenId,settings.encrypt_key);
  202. var keyArr = newLink.split('$');
  203. return keyArr;
  204. },
  205. getCount : function(obj,req,res,conditions){ // 查询指定对象的数量
  206. obj.count(conditions, function (err, count) {
  207. if (err){
  208. console.log(err);
  209. }else{
  210. return res.json({
  211. count : count
  212. });
  213. }
  214. });
  215. },
  216. encrypt : function(data,key){ // 密码加密
  217. var cipher = crypto.createCipher("bf",key);
  218. var newPsd = "";
  219. newPsd += cipher.update(data,"utf8","hex");
  220. newPsd += cipher.final("hex");
  221. return newPsd;
  222. },
  223. decrypt : function(data,key){ //密码解密
  224. var decipher = crypto.createDecipher("bf",key);
  225. var oldPsd = "";
  226. oldPsd += decipher.update(data,"hex","utf8");
  227. oldPsd += decipher.final("utf8");
  228. return oldPsd;
  229. }
  230. };
  231. module.exports = DbOpt;