Commit 58b47ee85b69d585fd7c427b94a52c61523ef1fc

Authored by Nattapon Wongpaet
1 parent 33ead877
Exists in master and in 1 other branch dev

update query mongodb

app.js
... ... @@ -88,6 +88,11 @@ app.use(function (req, res, next) {
88 88 });
89 89  
90 90  
  91 +const utils = require('utils/utils');
  92 +app.use( function( req, res, next ) {
  93 + req = utils.findQueryString(req);
  94 + next();
  95 +});
91 96  
92 97  
93 98 // get BE api configs
... ...
controllers/mongo-db/mongoConnect.js
... ... @@ -51,7 +51,6 @@ function mongoReq(req, query, collection){
51 51 });
52 52 });
53 53 });
54   -
55 54 }
56 55  
57 56  
... ...
controllers/mongo-db/query.js
1 1 let express = require('express');
2 2 let router = express.Router();
3 3 let connection = require("./mongoConnect.js")
4   -
  4 +var parseFilter = require('ldapjs').parseFilter;
  5 +let utils = require('../../utils/utils')
5 6  
6 7 router.get('/',async function (req, res) {
7   - var query = Object.assign(req.params, req.query);
8   - var result = await connection.reqMongo(req, query)
9   - res.status(200).json(result);
  8 +
  9 + var filter = parseFilter(req.query.filter)
  10 +
  11 + // var objectData = Object.assign(req.query,req.params);
  12 + // var filter = utils.getUpdateFilter(objectData);
  13 +
  14 + var query = await utils.getQuery(filter);
  15 + console.log(query)
  16 +
  17 + // var query = Object.assign(req.params, req.query);
  18 + var result = await connection.reqMongo(req, query, 'config')
  19 + res.status(200).send(result);
10 20 });
11 21  
12 22 router.post('/', (req, res) => {
... ...
package-lock.json
... ... @@ -88,6 +88,20 @@
88 88 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
89 89 "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
90 90 },
  91 + "backoff": {
  92 + "version": "2.5.0",
  93 + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
  94 + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=",
  95 + "requires": {
  96 + "precond": "0.2.3"
  97 + }
  98 + },
  99 + "balanced-match": {
  100 + "version": "1.0.0",
  101 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
  102 + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
  103 + "optional": true
  104 + },
91 105 "bcrypt-pbkdf": {
92 106 "version": "1.0.2",
93 107 "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
... ... @@ -154,11 +168,32 @@
154 168 "hoek": "2.16.3"
155 169 }
156 170 },
  171 + "brace-expansion": {
  172 + "version": "1.1.11",
  173 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
  174 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
  175 + "optional": true,
  176 + "requires": {
  177 + "balanced-match": "1.0.0",
  178 + "concat-map": "0.0.1"
  179 + }
  180 + },
157 181 "bson": {
158 182 "version": "1.1.0",
159 183 "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz",
160 184 "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA=="
161 185 },
  186 + "bunyan": {
  187 + "version": "1.8.12",
  188 + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz",
  189 + "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=",
  190 + "requires": {
  191 + "dtrace-provider": "0.8.7",
  192 + "moment": "2.22.2",
  193 + "mv": "2.1.1",
  194 + "safe-json-stringify": "1.2.0"
  195 + }
  196 + },
162 197 "bytes": {
163 198 "version": "3.0.0",
164 199 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
... ... @@ -281,6 +316,12 @@
281 316 "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
282 317 "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
283 318 },
  319 + "concat-map": {
  320 + "version": "0.0.1",
  321 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
  322 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
  323 + "optional": true
  324 + },
284 325 "connect-flash": {
285 326 "version": "0.1.1",
286 327 "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz",
... ... @@ -435,6 +476,15 @@
435 476 "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
436 477 "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw="
437 478 },
  479 + "dtrace-provider": {
  480 + "version": "0.8.7",
  481 + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz",
  482 + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=",
  483 + "optional": true,
  484 + "requires": {
  485 + "nan": "2.11.1"
  486 + }
  487 + },
438 488 "ecc-jsbn": {
439 489 "version": "0.1.2",
440 490 "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
... ... @@ -689,6 +739,19 @@
689 739 }
690 740 }
691 741 },
  742 + "glob": {
  743 + "version": "6.0.4",
  744 + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
  745 + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
  746 + "optional": true,
  747 + "requires": {
  748 + "inflight": "1.0.6",
  749 + "inherits": "2.0.3",
  750 + "minimatch": "3.0.4",
  751 + "once": "1.4.0",
  752 + "path-is-absolute": "1.0.1"
  753 + }
  754 + },
692 755 "har-validator": {
693 756 "version": "2.0.6",
694 757 "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
... ... @@ -777,6 +840,16 @@
777 840 "pope": "1.0.5"
778 841 }
779 842 },
  843 + "inflight": {
  844 + "version": "1.0.6",
  845 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
  846 + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
  847 + "optional": true,
  848 + "requires": {
  849 + "once": "1.4.0",
  850 + "wrappy": "1.0.2"
  851 + }
  852 + },
780 853 "inherits": {
781 854 "version": "2.0.3",
782 855 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
... ... @@ -898,6 +971,50 @@
898 971 "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
899 972 "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
900 973 },
  974 + "ldap-filter": {
  975 + "version": "0.2.2",
  976 + "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
  977 + "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=",
  978 + "requires": {
  979 + "assert-plus": "0.1.5"
  980 + },
  981 + "dependencies": {
  982 + "assert-plus": {
  983 + "version": "0.1.5",
  984 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
  985 + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA="
  986 + }
  987 + }
  988 + },
  989 + "ldapjs": {
  990 + "version": "1.0.2",
  991 + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
  992 + "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=",
  993 + "requires": {
  994 + "asn1": "0.2.3",
  995 + "assert-plus": "1.0.0",
  996 + "backoff": "2.5.0",
  997 + "bunyan": "1.8.12",
  998 + "dashdash": "1.14.1",
  999 + "dtrace-provider": "0.8.7",
  1000 + "ldap-filter": "0.2.2",
  1001 + "once": "1.4.0",
  1002 + "vasync": "1.6.4",
  1003 + "verror": "1.10.0"
  1004 + },
  1005 + "dependencies": {
  1006 + "asn1": {
  1007 + "version": "0.2.3",
  1008 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
  1009 + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
  1010 + },
  1011 + "assert-plus": {
  1012 + "version": "1.0.0",
  1013 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
  1014 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
  1015 + }
  1016 + }
  1017 + },
901 1018 "lodash": {
902 1019 "version": "4.17.11",
903 1020 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
... ... @@ -998,6 +1115,15 @@
998 1115 "mime-db": "1.36.0"
999 1116 }
1000 1117 },
  1118 + "minimatch": {
  1119 + "version": "3.0.4",
  1120 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
  1121 + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
  1122 + "optional": true,
  1123 + "requires": {
  1124 + "brace-expansion": "1.1.11"
  1125 + }
  1126 + },
1001 1127 "minimist": {
1002 1128 "version": "0.0.8",
1003 1129 "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
... ... @@ -1041,6 +1167,29 @@
1041 1167 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1042 1168 "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1043 1169 },
  1170 + "mv": {
  1171 + "version": "2.1.1",
  1172 + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
  1173 + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
  1174 + "optional": true,
  1175 + "requires": {
  1176 + "mkdirp": "0.5.1",
  1177 + "ncp": "2.0.0",
  1178 + "rimraf": "2.4.5"
  1179 + }
  1180 + },
  1181 + "nan": {
  1182 + "version": "2.11.1",
  1183 + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
  1184 + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
  1185 + "optional": true
  1186 + },
  1187 + "ncp": {
  1188 + "version": "2.0.0",
  1189 + "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
  1190 + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
  1191 + "optional": true
  1192 + },
1044 1193 "negotiator": {
1045 1194 "version": "0.6.1",
1046 1195 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
... ... @@ -1074,6 +1223,14 @@
1074 1223 "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
1075 1224 "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
1076 1225 },
  1226 + "once": {
  1227 + "version": "1.4.0",
  1228 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
  1229 + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
  1230 + "requires": {
  1231 + "wrappy": "1.0.2"
  1232 + }
  1233 + },
1077 1234 "one-time": {
1078 1235 "version": "0.0.4",
1079 1236 "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
... ... @@ -1166,6 +1323,12 @@
1166 1323 "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
1167 1324 "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
1168 1325 },
  1326 + "path-is-absolute": {
  1327 + "version": "1.0.1",
  1328 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
  1329 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
  1330 + "optional": true
  1331 + },
1169 1332 "path-to-regexp": {
1170 1333 "version": "0.1.7",
1171 1334 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
... ... @@ -1199,6 +1362,11 @@
1199 1362 "resolved": "https://registry.npmjs.org/pope/-/pope-1.0.5.tgz",
1200 1363 "integrity": "sha512-53FgeyiX79LOvZvviqFSLFT3otSRIpPv4uTDRscoWaJlr1LWCaTB+ouhvCouj08Ag28pM18FZv9Y2+wmimILAA=="
1201 1364 },
  1365 + "precond": {
  1366 + "version": "0.2.3",
  1367 + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",
  1368 + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw="
  1369 + },
1202 1370 "process-nextick-args": {
1203 1371 "version": "2.0.0",
1204 1372 "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
... ... @@ -1378,11 +1546,26 @@
1378 1546 "align-text": "0.1.4"
1379 1547 }
1380 1548 },
  1549 + "rimraf": {
  1550 + "version": "2.4.5",
  1551 + "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
  1552 + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
  1553 + "optional": true,
  1554 + "requires": {
  1555 + "glob": "6.0.4"
  1556 + }
  1557 + },
1381 1558 "safe-buffer": {
1382 1559 "version": "5.1.2",
1383 1560 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1384 1561 "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1385 1562 },
  1563 + "safe-json-stringify": {
  1564 + "version": "1.2.0",
  1565 + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
  1566 + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
  1567 + "optional": true
  1568 + },
1386 1569 "safer-buffer": {
1387 1570 "version": "2.1.2",
1388 1571 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
... ... @@ -1661,6 +1844,29 @@
1661 1844 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1662 1845 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1663 1846 },
  1847 + "vasync": {
  1848 + "version": "1.6.4",
  1849 + "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
  1850 + "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=",
  1851 + "requires": {
  1852 + "verror": "1.6.0"
  1853 + },
  1854 + "dependencies": {
  1855 + "extsprintf": {
  1856 + "version": "1.2.0",
  1857 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
  1858 + "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk="
  1859 + },
  1860 + "verror": {
  1861 + "version": "1.6.0",
  1862 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
  1863 + "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=",
  1864 + "requires": {
  1865 + "extsprintf": "1.2.0"
  1866 + }
  1867 + }
  1868 + }
  1869 + },
1664 1870 "verror": {
1665 1871 "version": "1.10.0",
1666 1872 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
... ... @@ -1721,6 +1927,11 @@
1721 1927 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
1722 1928 "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
1723 1929 },
  1930 + "wrappy": {
  1931 + "version": "1.0.2",
  1932 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
  1933 + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
  1934 + },
1724 1935 "xml-crypto": {
1725 1936 "version": "0.10.1",
1726 1937 "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.10.1.tgz",
... ...
package.json
... ... @@ -18,6 +18,7 @@
18 18 "express-request-id": "^1.4.1",
19 19 "express-session": "^1.15.6",
20 20 "indicative": "^3.0.6",
  21 + "ldapjs": "^1.0.2",
21 22 "log4js": "^3.0.6",
22 23 "moment": "^2.22.2",
23 24 "mongodb": "^3.1.8",
... ...
utils/utils.js 0 โ†’ 100644
... ... @@ -0,0 +1,174 @@
  1 +
  2 +
  3 +utils = {};
  4 +
  5 +
  6 +utils.findQueryString = function(req)
  7 +{
  8 + var keywords = ["filter","offset","orderby","limit","fields"];
  9 +
  10 + var baseUrl = decodeURIComponent(req.url);
  11 +
  12 + if(baseUrl && baseUrl.indexOf("filter=(") != -1)
  13 + {
  14 + baseUrl = "&"+baseUrl.split("?")[1];
  15 +
  16 + var indexList = [];
  17 + var listData = {};
  18 + for(var i=0;i<keywords.length;i++)
  19 + {
  20 + var foundIndex = baseUrl.indexOf("&"+keywords[i]+"=");
  21 + if(foundIndex != -1)
  22 + {
  23 + listData[foundIndex] = keywords[i];
  24 + indexList.push(foundIndex);
  25 + }
  26 +
  27 + }
  28 + indexList.sort(function(a, b){return a - b})
  29 +
  30 + for(var i = 0;i<keywords.length;i++)
  31 + {
  32 + baseUrl = baseUrl.replace("&"+keywords[i]+"=","[split]")
  33 + }
  34 + var splitUrl = baseUrl.split("[split]");
  35 +
  36 + req.query = {};
  37 + for(var i=0;i<indexList.length;i++)
  38 + req.query[listData[indexList[i]]] = splitUrl[i+1];
  39 +
  40 + }
  41 + return req;
  42 +}
  43 +
  44 +utils.getUpdateFilter = function(obj)
  45 +{
  46 +
  47 + if(obj.filter)
  48 + {
  49 +
  50 + var filter = findValueInBracket(obj.filter);
  51 + obj = Object.assign(obj, filter);
  52 +
  53 + delete obj.filter;
  54 + }
  55 +
  56 +
  57 + return obj;
  58 +}
  59 +
  60 +utils.getQuery = async function(data,query){
  61 + if(!query)
  62 + var query = {};
  63 + //type !(xx) connot be use
  64 + var temFilter = data.filters;
  65 + for(var i = 0; i < temFilter.length; i++){
  66 + // console.log(temFilter[i].filters)
  67 + if(temFilter[i].filters){
  68 + query = getQuery(temFilter[i],query);
  69 + } else {
  70 + var operate = "";
  71 + switch(temFilter[i].type){
  72 + case 'equal': operate = '$eq'; break;
  73 + case 'ge': operate = '$gte'; break;//>=
  74 + case 'le': operate = '$lte'; break;//<=
  75 + case 'approx' : operate = '$in'; break;
  76 + default : operate = "$"+temFilter[i].type; break;
  77 + }
  78 +
  79 + switch(operate){
  80 + case '$present' :
  81 + break;
  82 + case '$substring' :
  83 + // if(temFilter[i].initial){
  84 + // query += temFilter[i].attribute +" LIKE '"+ temFilter[i].initial + "%'"
  85 + // } else if(temFilter[i].final){
  86 + // query += temFilter[i].attribute +" LIKE '%" + temFilter[i].final + "'"
  87 + // } else {
  88 + // var any = "%";
  89 + // for(var j = 0; j < temFilter[i].any.length; j++){
  90 + // any += temFilter[i].any[j]+"%";
  91 + // }
  92 + // query += temFilter[i].attribute +" LIKE '" + any + "'"
  93 + // }
  94 + break;
  95 + default :
  96 + // query += temFilter[i].attribute +" "+ operate +" "+ temFilter[i].value;
  97 + var regexValue = new RegExp(temFilter[i].value,"g")
  98 + if(data.type == 'or'){
  99 + var objOr = {}
  100 + var attribute = temFilter[i].attribute;
  101 + objOr[attribute] = regexValue
  102 + if(!query['$or'])
  103 + query['$or'] = []
  104 + query['$or'].push(objOr)
  105 + } else {
  106 + var attribute = temFilter[i].attribute;
  107 + query[attribute] = regexValue
  108 + }
  109 + // query = Object.assign(obj, obj)
  110 + break;
  111 + }
  112 + // query += temFilter[i].attribute +" "+ operate +" "+ temFilter[i].value;
  113 + }
  114 + // if(i != temFilter.length-1)
  115 + // query += " "+data.type.toUpperCase()+" "
  116 + }
  117 + return query;
  118 +}
  119 +
  120 +function findValueInBracket(data)
  121 +{
  122 + data = data.substring(1,data.length-1);
  123 + var returnData = {};
  124 +
  125 +
  126 + if(data.indexOf("&") == -1 && data.indexOf("|") == -1)
  127 + {
  128 + //single data
  129 + var t = data.split("=");
  130 + returnData[t[0]] = t[1];
  131 +
  132 + }else
  133 + {
  134 + //multi data
  135 + var left = [];
  136 + var splitData = data.split("");
  137 + for(var i=0;i<splitData.length;i++)
  138 + {
  139 + if(splitData[i] === "(")
  140 + {
  141 + left.push(i);
  142 + }
  143 + else if(splitData[i] === ")")
  144 + {
  145 + var pop = left.pop();
  146 + var rawdata = data.substring(pop+1,i);
  147 + if(rawdata.indexOf("&") == -1 && rawdata.indexOf("|") == -1)
  148 + {
  149 + var t = rawdata.split("=");
  150 +
  151 + if(!returnData[t[0]])
  152 + returnData[t[0]] = [];
  153 +
  154 + returnData[t[0]].push(t[1]);
  155 + }
  156 +
  157 +
  158 + }
  159 + }
  160 +
  161 + var keylist = Object.keys(returnData)
  162 + for(var i=0;i<keylist.length;i++)
  163 + {
  164 +
  165 + if(returnData[keylist[i]].length == 1)
  166 + returnData[keylist[i]] = returnData[keylist[i]][0];
  167 + }
  168 + }
  169 +
  170 + return returnData;
  171 +
  172 +}
  173 +
  174 +module.exports = utils;
0 175 \ No newline at end of file
... ...