mas-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.vscode/settings.json +112 -0
  2. package/README.md +1 -0
  3. package/package.json +25 -0
  4. package/src/config/api.res.json +1 -0
  5. package/src/config/api.tree.json +1 -0
  6. package/src/config/apiModules/del.module +6 -0
  7. package/src/config/apiModules/get.module +6 -0
  8. package/src/config/apiModules/set.module +6 -0
  9. package/src/config/config.schema.js +29 -0
  10. package/src/index.js +103 -0
  11. package/src/public/doc/css/app.722f60c4.css +1 -0
  12. package/src/public/doc/css/chunk-287b9965.80548a4b.css +1 -0
  13. package/src/public/doc/css/chunk-vendors.a16c4353.css +1 -0
  14. package/src/public/doc/favicon.ico +0 -0
  15. package/src/public/doc/fonts/element-icons.535877f5.woff +0 -0
  16. package/src/public/doc/fonts/element-icons.732389de.ttf +0 -0
  17. package/src/public/doc/img/jsoneditor-icons.256e3abc.svg +893 -0
  18. package/src/public/doc/index.html +1 -0
  19. package/src/public/doc/js/app.9ce10690.js +2 -0
  20. package/src/public/doc/js/app.9ce10690.js.map +1 -0
  21. package/src/public/doc/js/chunk-287b9965.77cfd27f.js +32 -0
  22. package/src/public/doc/js/chunk-287b9965.77cfd27f.js.map +1 -0
  23. package/src/public/doc/js/chunk-vendors.7c84e9a7.js +35 -0
  24. package/src/public/doc/js/chunk-vendors.7c84e9a7.js.map +1 -0
  25. package/src/public/index.html +15 -0
  26. package/src/state.js +6 -0
  27. package/src/utils/DataVerified.js +35 -0
  28. package/src/utils/beforeCreate.js +19 -0
  29. package/src/utils/createApi.js +34 -0
  30. package/src/utils/createApiFile.js +40 -0
  31. package/src/utils/createSqlForm.js +7 -0
  32. package/src/utils/encrypt.js +1 -0
  33. package/src/utils/getDir.js +60 -0
  34. package/src/utils/logs.js +16 -0
  35. package/src/utils/masDoc.js +37 -0
  36. package/src/utils/masRoute.js +29 -0
  37. package/src/utils/quickSend.js +18 -0
  38. package/src/utils/token.js +57 -0
  39. package/test/.utils/api.js +4 -0
  40. package/test/.utils/apis.js +5 -0
  41. package/test/.utils/beforeIndex.js +4 -0
  42. package/test/.utils/createForm.js +4 -0
  43. package/test/config/api.config.json +7 -0
  44. package/test/config/api.config.k.json +1 -0
  45. package/test/config/config.js +22 -0
  46. package/test/config/sqlform.config.js +23 -0
  47. package/test/index.js +12 -0
  48. package/test/public/1.txt +1 -0
  49. package/test/serverLogs/2022-10-29.log +6 -0
  50. package/test/serverLogs/2022-10-30.log +58 -0
  51. package/test/src/$form.js +1 -0
  52. package/test/src/api/index.js +3 -0
  53. package/test/src/api/test.js +9 -0
  54. package/test/src/api/vip/del.js +6 -0
  55. package/test/src/api/vip/get.js +6 -0
  56. package/test/src/api/vip/set.js +6 -0
  57. package/test/src/api/vip666.js +4 -0
  58. package/test/src/debug.js +2 -0
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-cn">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>mas-server</title>
9
+ </head>
10
+
11
+ <body>
12
+ <h1>hello!mas-server</h1>
13
+ </body>
14
+
15
+ </html>
package/src/state.js ADDED
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ state: {
3
+ config: null,
4
+ dirname: null
5
+ }
6
+ };
@@ -0,0 +1,35 @@
1
+ const state = require('../state');
2
+ const config = state.config;
3
+ let apiCofig = require(state.dirname + '/config/api.config.json');
4
+ module.exports = (req, res, next) => {
5
+ let checkData = [];
6
+ let bodyArr = [];
7
+ let right = true;
8
+
9
+ if (apiCofig[req.url] && apiCofig[req.url].checkData) {
10
+ checkData = apiCofig[req.url].checkData;
11
+ checkData = checkData.filter((item) =>
12
+ !(item instanceof Object) || (item instanceof Object && !item.optional)
13
+ ).map(item =>
14
+ item instanceof Object ? item.name : item
15
+ );
16
+ bodyArr = Object.keys(req.body).filter(item => {
17
+ if (checkData.indexOf(item) == -1) {
18
+ return false;
19
+ } else if ((req.body[item] + '').replace(/\s+/g, "") == "") {
20
+ return false;
21
+ } else return true;
22
+
23
+ });
24
+
25
+ if (bodyArr.length != checkData.length && checkData.length != 0) {
26
+ res.return('请求数据格式错误!', 0, 400);
27
+ right = false;
28
+ }
29
+ }
30
+ req.data = JSON.parse(JSON.stringify(req.body));
31
+ Object.keys(req.data).map(item => {
32
+ if (bodyArr.indexOf(item) == -1) delete req.data[item];
33
+ });
34
+ if (right) next();
35
+ };
@@ -0,0 +1,19 @@
1
+ const state = require('../state');
2
+ const masRoute = require('./masRoute');
3
+ const path = require('path');
4
+ const { setSqlConfig, sqlInit } = require('masmysql');
5
+ module.exports = (dirname) => {
6
+ const config = require(path.join(dirname, "/config", "config.js"));
7
+ state.config = config;
8
+ state.dirname = dirname;
9
+ // 写入约定式路由
10
+ masRoute();
11
+ // 写入数据库文件
12
+ if (config.useSql) {
13
+ (async () => {
14
+ setSqlConfig(config.sql);
15
+ await sqlInit();
16
+ })();
17
+ }
18
+ }
19
+
@@ -0,0 +1,34 @@
1
+ const fs = require("fs");
2
+ const { tip: masTip } = require("masutils");
3
+
4
+ module.exports = (dirname) => {
5
+ let srcArr = JSON.parse(JSON.stringify(process.argv)).slice(2);
6
+ for (let v of srcArr) {
7
+ let src = v.split('/');
8
+ const fileModule =
9
+ `module.exports = async (req, res) => {
10
+ res.return('hello,masjs!');
11
+ }`
12
+ ;
13
+ if (!src) {
14
+ masTip("请传入正确参数");
15
+ process.exit(1);
16
+ }
17
+ (async () => {
18
+ const file = src.pop().replace(/\s+/g, '');
19
+ src = src.join('/');
20
+ const src1 = src;
21
+ src = dirname + `/src/api/${src}`;
22
+ let isExist = fs.existsSync(src);
23
+ if (!isExist) fs.mkdirSync(src, { recursive: true });
24
+ isExist = fs.existsSync(src + `/${file}.js`);
25
+ if (isExist) {
26
+ masTip("该接口已存在!");
27
+ return;
28
+ }
29
+ const res = fs.writeFileSync(src + `/${file}.js`, fileModule);
30
+ masTip(`创建 ${src1+ `/${file}`}`,1);
31
+ })();
32
+ }
33
+
34
+ };
@@ -0,0 +1,40 @@
1
+ const fs = require("fs");
2
+
3
+ const { tip: masTip } = require("masutils");
4
+
5
+
6
+ module.exports = (dirname) => {
7
+ let srcArr = JSON.parse(JSON.stringify(process.argv)).slice(2);
8
+ let src = srcArr[0];
9
+ function copyFile(arr, dir) {
10
+ const file =
11
+ fs.readFileSync(__dirname + `/../config/apiModules/${arr}.module`)
12
+ .toString().replace("@@form@@", srcArr[1]);
13
+ fs.writeFileSync(dir, file);
14
+ }
15
+ if (!srcArr[1]) {
16
+ masTip("请传入表名");
17
+ process.exit(1);
18
+ }
19
+ if (!src) {
20
+ masTip("请传入正确参数");
21
+ process.exit(1);
22
+ }
23
+ (async () => {
24
+ src = dirname + `/src/api/${src}`;
25
+ let isExist = fs.existsSync(src);
26
+ if (!isExist) fs.mkdirSync(src, { recursive: true });
27
+ let status = 1;
28
+ for (let v of ["get", "set", "del"]) {
29
+ if (fs.existsSync(src + `/${v}.js`)) {
30
+ status = 0;
31
+ masTip(`${v}接口已存在无法创建`);
32
+ } else {
33
+ copyFile(v, src + `/${v}.js`);
34
+ masTip(`${v}接口创建成功`, 1);
35
+ }
36
+ }
37
+ status && masTip(`创建 ${srcArr[0]}接口完成`, 1);
38
+ })();
39
+
40
+ };
@@ -0,0 +1,7 @@
1
+ const { setSqlConfig, createSqlForm } = require("masmysql");
2
+ module.exports = (config, form) => {
3
+ (async () => {
4
+ setSqlConfig(config);
5
+ createSqlForm(form);
6
+ })();
7
+ };
@@ -0,0 +1 @@
1
+ const a6_0x20213c=a6_0x53f3;(function(_0x18fab2,_0x11632b){const _0x31751d=a6_0x53f3,_0x3aba8c=_0x18fab2();while(!![]){try{const _0x452989=-parseInt(_0x31751d(0xea))/0x1+-parseInt(_0x31751d(0xef))/0x2*(-parseInt(_0x31751d(0x107))/0x3)+-parseInt(_0x31751d(0x115))/0x4+-parseInt(_0x31751d(0xf2))/0x5+-parseInt(_0x31751d(0x108))/0x6*(parseInt(_0x31751d(0xfa))/0x7)+parseInt(_0x31751d(0x114))/0x8+-parseInt(_0x31751d(0x110))/0x9*(-parseInt(_0x31751d(0xfb))/0xa);if(_0x452989===_0x11632b)break;else _0x3aba8c['push'](_0x3aba8c['shift']());}catch(_0x3674b8){_0x3aba8c['push'](_0x3aba8c['shift']());}}}(a6_0x4dbf,0x5b7ec));const crypto=require('crypto'),Mtime=require(a6_0x20213c(0x10c));Mtime[a6_0x20213c(0xf1)](a6_0x20213c(0xf6));const algorithm=[a6_0x20213c(0xf0),a6_0x20213c(0x106),a6_0x20213c(0xeb),'aes-128-cfb8',a6_0x20213c(0xff)],_keyStr=a6_0x20213c(0xec);function isJSON(_0x3aa645){const _0x58d407=a6_0x20213c;if(typeof _0x3aa645=='string')try{return JSON[_0x58d407(0x112)](_0x3aa645),!![];}catch(_0x92ab15){return![];}else return![];}function a6_0x4dbf(){const _0x42031c=['indexOf','5414MncdJZ','aes-128-cbc','locale','3491075EEWInr','\x1b[31m%s\x1b[0m','_utf8_decode','update','zh-cn','utf8','setHours','replace','3650458dEzQBP','20jNEJie','createDecipheriv','charCodeAt','exports','aes-128-ctr','hex','final','getTimezoneOffset','decode','charAt','createCipheriv','aes-128-cfb','33iKRgCW','6IXynxU','encode','length','getTime','moment','\x1b[32m%s\x1b[0m','toFixed','fromCharCode','8223147hkNbEC','info','parse','getHours','4891248jDEIIP','2491748gymogE','random','251139dmjAGE','aes-128-cfb1','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=','slice'];a6_0x4dbf=function(){return _0x42031c;};return a6_0x4dbf();}function a6_0x53f3(_0x2827dc,_0x350d7d){const _0x4dbf99=a6_0x4dbf();return a6_0x53f3=function(_0x53f34c,_0x13a7fa){_0x53f34c=_0x53f34c-0xea;let _0x108cc6=_0x4dbf99[_0x53f34c];return _0x108cc6;},a6_0x53f3(_0x2827dc,_0x350d7d);}const randomInt=(_0x58d52c,_0x443f29)=>parseInt(Math[a6_0x20213c(0x116)]()*(_0x443f29-_0x58d52c+0x1)+_0x58d52c),randomStr=_0x39e991=>{let _0x2fdc52='';for(let _0x2b2ff5=0x0;_0x2b2ff5<_0x39e991;_0x2b2ff5++){_0x2fdc52+=_keyStr[randomInt(0x0,0x40)];}return _0x2fdc52;},randomstr=_0x1e245d=>{let _0x4f7c67='';for(let _0x1c868a=0x0;_0x1c868a<_0x1e245d;_0x1c868a++){_0x4f7c67+=_keyStr[randomInt(0x0,0x3d)];}return _0x4f7c67;};function masTip(_0x50293f,_0x4ebf2b=0x0){const _0x449139=a6_0x20213c;console[_0x449139(0x111)](!_0x4ebf2b?_0x449139(0xf3):_0x449139(0x10d),_0x50293f);}const base={'_utf8_encode'(_0x5d1822){const _0x1badb9=a6_0x20213c;_0x5d1822=_0x5d1822[_0x1badb9(0xf9)](/\r\n/g,'\x0a');var _0x3d3211='';for(var _0x1cc0c8=0x0;_0x1cc0c8<_0x5d1822[_0x1badb9(0x10a)];_0x1cc0c8++){var _0x5ec275=_0x5d1822['charCodeAt'](_0x1cc0c8);if(_0x5ec275<0x80)_0x3d3211+=String[_0x1badb9(0x10f)](_0x5ec275);else _0x5ec275>0x7f&&_0x5ec275<0x800?(_0x3d3211+=String[_0x1badb9(0x10f)](_0x5ec275>>0x6|0xc0),_0x3d3211+=String[_0x1badb9(0x10f)](_0x5ec275&0x3f|0x80)):(_0x3d3211+=String[_0x1badb9(0x10f)](_0x5ec275>>0xc|0xe0),_0x3d3211+=String[_0x1badb9(0x10f)](_0x5ec275>>0x6&0x3f|0x80),_0x3d3211+=String[_0x1badb9(0x10f)](_0x5ec275&0x3f|0x80));}return _0x3d3211;},'_utf8_decode'(_0x1e1626){const _0x46f7c1=a6_0x20213c;var _0x57d990='',_0x859373=0x0,_0x1472cf=c1=c2=0x0;while(_0x859373<_0x1e1626[_0x46f7c1(0x10a)]){_0x1472cf=_0x1e1626[_0x46f7c1(0xfd)](_0x859373);if(_0x1472cf<0x80)_0x57d990+=String[_0x46f7c1(0x10f)](_0x1472cf),_0x859373++;else _0x1472cf>0xbf&&_0x1472cf<0xe0?(c2=_0x1e1626['charCodeAt'](_0x859373+0x1),_0x57d990+=String[_0x46f7c1(0x10f)]((_0x1472cf&0x1f)<<0x6|c2&0x3f),_0x859373+=0x2):(c2=_0x1e1626[_0x46f7c1(0xfd)](_0x859373+0x1),c3=_0x1e1626[_0x46f7c1(0xfd)](_0x859373+0x2),_0x57d990+=String[_0x46f7c1(0x10f)]((_0x1472cf&0xf)<<0xc|(c2&0x3f)<<0x6|c3&0x3f),_0x859373+=0x3);}return _0x57d990;},'encode'(_0x225db8){const _0x1ab469=a6_0x20213c;var _0x5a75bf='',_0xe8eb78,_0x2e5dc1,_0xae61ea,_0x1f7b8d,_0x5b4ff2,_0x307a15,_0x278b53,_0x33139c=0x0;_0x225db8=this['_utf8_encode'](_0x225db8);while(_0x33139c<_0x225db8['length']){_0xe8eb78=_0x225db8[_0x1ab469(0xfd)](_0x33139c++),_0x2e5dc1=_0x225db8[_0x1ab469(0xfd)](_0x33139c++),_0xae61ea=_0x225db8[_0x1ab469(0xfd)](_0x33139c++),_0x1f7b8d=_0xe8eb78>>0x2,_0x5b4ff2=(_0xe8eb78&0x3)<<0x4|_0x2e5dc1>>0x4,_0x307a15=(_0x2e5dc1&0xf)<<0x2|_0xae61ea>>0x6,_0x278b53=_0xae61ea&0x3f;if(isNaN(_0x2e5dc1))_0x307a15=_0x278b53=0x40;else isNaN(_0xae61ea)&&(_0x278b53=0x40);_0x5a75bf=_0x5a75bf+_keyStr['charAt'](_0x1f7b8d)+_keyStr[_0x1ab469(0x104)](_0x5b4ff2)+_keyStr[_0x1ab469(0x104)](_0x307a15)+_keyStr['charAt'](_0x278b53);}return _0x5a75bf;},'decode'(_0x4a6d74){const _0xb7f8ed=a6_0x20213c;var _0x4dcb49='',_0x2829a3,_0x5d8dd5,_0x52996c,_0x19319f,_0xb1fb7e,_0x2eb581,_0x280e70,_0x432786=0x0;_0x4a6d74=_0x4a6d74[_0xb7f8ed(0xf9)](/[^A-Za-z0-9\+\/\=]/g,'');while(_0x432786<_0x4a6d74[_0xb7f8ed(0x10a)]){_0x19319f=_keyStr[_0xb7f8ed(0xee)](_0x4a6d74['charAt'](_0x432786++)),_0xb1fb7e=_keyStr[_0xb7f8ed(0xee)](_0x4a6d74[_0xb7f8ed(0x104)](_0x432786++)),_0x2eb581=_keyStr[_0xb7f8ed(0xee)](_0x4a6d74['charAt'](_0x432786++)),_0x280e70=_keyStr[_0xb7f8ed(0xee)](_0x4a6d74[_0xb7f8ed(0x104)](_0x432786++)),_0x2829a3=_0x19319f<<0x2|_0xb1fb7e>>0x4,_0x5d8dd5=(_0xb1fb7e&0xf)<<0x4|_0x2eb581>>0x2,_0x52996c=(_0x2eb581&0x3)<<0x6|_0x280e70,_0x4dcb49=_0x4dcb49+String[_0xb7f8ed(0x10f)](_0x2829a3),_0x2eb581!=0x40&&(_0x4dcb49=_0x4dcb49+String['fromCharCode'](_0x5d8dd5)),_0x280e70!=0x40&&(_0x4dcb49=_0x4dcb49+String[_0xb7f8ed(0x10f)](_0x52996c));}return _0x4dcb49=this[_0xb7f8ed(0xf4)](_0x4dcb49),_0x4dcb49;}};function cipher(_0x16acbe,_0x3350c2,_0x350d68){const _0xda86f9=a6_0x20213c,_0x2cbe99=randomStr(0x8),_0x4612e1=randomStr(0x8);try{const _0x39ce98=crypto[_0xda86f9(0x105)](algorithm[_0x350d68],_0x3350c2,_0x2cbe99+_0x4612e1);return _0x2cbe99+_0x39ce98[_0xda86f9(0xf5)](_0x16acbe,_0xda86f9(0xf7),_0xda86f9(0x100))+_0x39ce98['final'](_0xda86f9(0x100))+_0x4612e1;}catch(_0x365c43){return undefined;}}function decipher(_0x1f9a0a,_0x4251cb,_0x40de0c){const _0x51019d=a6_0x20213c,_0x2b5521=_0x1f9a0a[_0x51019d(0xed)](0x0,0x8),_0x3bffc7=_0x1f9a0a[_0x51019d(0xed)](_0x1f9a0a[_0x51019d(0x10a)]-0x8,_0x1f9a0a[_0x51019d(0x10a)]);_0x1f9a0a=_0x1f9a0a['slice'](0x8,_0x1f9a0a[_0x51019d(0x10a)]-0x8);try{const _0x2d1d9e=crypto[_0x51019d(0xfc)](algorithm[_0x40de0c],_0x4251cb,_0x2b5521+_0x3bffc7);return _0x2d1d9e[_0x51019d(0xf5)](_0x1f9a0a,'hex',_0x51019d(0xf7))+_0x2d1d9e[_0x51019d(0x101)](_0x51019d(0xf7));}catch(_0x1cba73){return undefined;}}function getTimestamp(){const _0x287d26=a6_0x20213c;return(new Date()[_0x287d26(0x10b)]()/0x3e8)[_0x287d26(0x10e)](0x0)*0x3e8;}function getTime(){const _0x292c2f=a6_0x20213c;var _0x317da3=new Date();return _0x317da3[_0x292c2f(0xf8)](_0x317da3[_0x292c2f(0x113)]()-_0x317da3[_0x292c2f(0x102)]()/0x3c),_0x317da3['toJSON']()['slice'](0x0,0x13)['replace']('T','\x20');}const encode=function(_0x2a5170,_0x4eb10f,_0x5b8d75=0x0,_0x503e0b=0x0){const _0xfa531d=a6_0x20213c;if(_0x503e0b<0x0||_0x503e0b>0x4)return undefined;_0x2a5170 instanceof Object&&(_0x2a5170=JSON['stringify'](_0x2a5170));while(_0x4eb10f[_0xfa531d(0x10a)]<0x10){_0x4eb10f+='0';}return _0x2a5170=base[_0xfa531d(0x109)](cipher(_0x2a5170,_0x4eb10f,_0x503e0b)),_0x5b8d75&&(_0x2a5170=base[_0xfa531d(0x109)](_0x2a5170),_0x2a5170=base[_0xfa531d(0x109)](_0x2a5170),_0x2a5170=base[_0xfa531d(0x109)](_0x2a5170),_0x2a5170=base[_0xfa531d(0x109)](_0x2a5170),_0x2a5170=base['encode'](_0x2a5170)),_0x2a5170;},decode=function(_0x1424b,_0xcc4acf,_0x4e1d20=0x0,_0x3e9c83=0x0){const _0x177629=a6_0x20213c;if(_0x3e9c83<0x0||_0x3e9c83>0x4)return undefined;while(_0xcc4acf['length']<0x10){_0xcc4acf+='0';}return _0x1424b=base[_0x177629(0x103)](_0x1424b),_0x4e1d20&&(_0x1424b=base['decode'](_0x1424b),_0x1424b=base[_0x177629(0x103)](_0x1424b),_0x1424b=base[_0x177629(0x103)](_0x1424b),_0x1424b=base['decode'](_0x1424b),_0x1424b=base['decode'](_0x1424b)),_0x1424b=decipher(_0x1424b,_0xcc4acf,_0x3e9c83),isJSON(_0x1424b)&&(_0x1424b=JSON[_0x177629(0x112)](_0x1424b)),_0x1424b;};module[a6_0x20213c(0xfe)]={'encode':encode,'getTime':getTime,'decode':decode,'isJSON':isJSON,'randomInt':randomInt,'randomStr':randomStr,'randomstr':randomstr,'masTip':masTip,'getTimestamp':getTimestamp,'Mtime':Mtime};
@@ -0,0 +1,60 @@
1
+ const fs = require('fs');
2
+ const state = require('../state');
3
+
4
+ module.exports = (root) => {
5
+ let endDir = [];
6
+ let DirChinese = require(state.dirname + '/config/api.config.k.json');
7
+ function getFiles(dir) {
8
+ dirArr = fs.readdirSync(state.dirname + `/src${dir}`);
9
+ for (let v of dirArr) {
10
+ let vArr = v.split('.');
11
+ {
12
+ if (!DirChinese[vArr[0]]) {
13
+ DirChinese[vArr[0]] = '';
14
+ }
15
+ }
16
+ if (vArr[vArr.length - 1] == 'js' && vArr.length >= 2) {
17
+ endDir.push(`${dir}/${v.replace('.js', '')}`);
18
+ } else {
19
+ getFiles(`${dir}/${v}`);
20
+ }
21
+
22
+ }
23
+
24
+ }
25
+ let dirTree = {};
26
+ const sign = 'api';
27
+ function getTree(item) {
28
+ if (item.length == 2) {
29
+ if (!dirTree[item[0]]) dirTree[item[0]] = {};
30
+ dirTree[item[0]][item[1]] = sign;
31
+ }
32
+ if (item.length == 3) {
33
+ if (!dirTree[item[0]]) dirTree[item[0]] = {};
34
+ if (!dirTree[item[0]][item[1]]) dirTree[item[0]][item[1]] = {};
35
+ dirTree[item[0]][item[1]][item[2]] = sign;
36
+ }
37
+ if (item.length == 4) {
38
+ if (!dirTree[item[0]]) dirTree[item[0]] = {};
39
+ if (!dirTree[item[0]][item[1]]) dirTree[item[0]][item[1]] = {};
40
+ if (!dirTree[item[0]][item[1]][item[2]]) dirTree[item[0]][item[1]][item[2]] = {};
41
+ dirTree[item[0]][item[1]][item[2]][item[3]] = sign;
42
+ }
43
+ if (item.length == 5) {
44
+ if (!dirTree[item[0]]) dirTree[item[0]] = {};
45
+ if (!dirTree[item[0]][item[1]]) dirTree[item[0]][item[1]] = {};
46
+ if (!dirTree[item[0]][item[1]][item[2]]) dirTree[item[0]][item[1]][item[2]] = {};
47
+ if (!dirTree[item[0]][item[1]][item[2]][item[3]]) dirTree[item[0]][item[1]][item[2][item[3]]] = {};
48
+ dirTree[item[0]][item[1]][item[2]][item[3][item[4]]] = sign;
49
+ }
50
+ }
51
+ getFiles(root);
52
+ for (let item of endDir) {
53
+ getTree(item.slice(1).split('/'));
54
+ }
55
+ DirChinese.api = '接口';
56
+
57
+ fs.writeFileSync(__dirname + '/../config/api.tree.json', JSON.stringify(dirTree));
58
+ fs.writeFileSync(state.dirname + '/config/api.config.k.json', JSON.stringify(DirChinese));
59
+ return endDir;
60
+ };
@@ -0,0 +1,16 @@
1
+ const state = require('../state');
2
+ const config = state.config;
3
+ const fs = require('fs');
4
+ module.exports = (req, res, next) => {
5
+ let date = null;
6
+ date = new Date();
7
+ let data = `${date.toString().slice(16, 24)} ${req.method} ${req.ipInfo.ip} ${req.url} ${req.body ? JSON.stringify(req.body) : ''}\n`;
8
+ fs.appendFileSync(
9
+ state.dirname + `/serverLogs/${date.toLocaleDateString().split('/').map(item => { (item.length < 2 && (item = '0' + item)); return item; }).join('-')}.log`,
10
+ data
11
+ );
12
+ if (config.logs.debug) {
13
+ console.log(data);
14
+ }
15
+ next();
16
+ };
@@ -0,0 +1,37 @@
1
+
2
+ module.exports = (app, config) => {
3
+ const state = require('../state');
4
+ const dirname = state.dirname;
5
+ if (config.apidoc) {
6
+ app.post('/doc/get', (req, res) => {
7
+ res.return({
8
+ config: require(dirname + '/config/api.config.json'),
9
+ tree: require('../config/api.tree.json'),
10
+ k: require(dirname + '/config/api.config.k.json'),
11
+ res: require('../config/api.res.json'),
12
+ proName: config.projectName
13
+ });
14
+ });
15
+ app.post('/doc/setBody', (req, res) => {
16
+ let apiRes = require('../config/api.res.json');
17
+ if (req.body.name) {
18
+ apiRes[req.body.name] = req.body.data;
19
+ fs.writeFileSync(__dirname + '/../config/api.res.json', JSON.stringify(apiRes));
20
+ res.return(1);
21
+ } else {
22
+ res.return(0, 0);
23
+ }
24
+ });
25
+ app.post('/doc/getBody', (req, res) => {
26
+ let apiRes = require('../config/api.res.json');
27
+ if (req.body.name && apiRes[req.body.name]) {
28
+ res.return(apiRes[req.body.name]);
29
+ } else {
30
+ res.return(0, 0);
31
+ }
32
+ });
33
+ app.get('/doc', (req, res) => {
34
+ res.redirect('/masPublic/doc/index.html');
35
+ });
36
+ }
37
+ };
@@ -0,0 +1,29 @@
1
+ const state = require('../state');
2
+ const getDir = require("./getDir");
3
+ const fs = require("fs");
4
+
5
+ module.exports = () => {
6
+ const route = require(state.dirname + "/config/api.config.json");
7
+ let isWrite = 0;
8
+ let routeArr = Object.keys(route);
9
+ // 获得新配置
10
+ let newRoute = getDir('/api').map(item => {
11
+ // 如果旧配置里面没有就创建
12
+ if (routeArr.indexOf(item) == -1) {
13
+ route[item] = {};
14
+ isWrite = 1;
15
+ }
16
+ return item;
17
+ });
18
+ // 如果多了就删除
19
+ routeArr.map(item => {
20
+ if (newRoute.indexOf(item) == -1) {
21
+ delete route[item];
22
+ isWrite = 1;
23
+ }
24
+ });
25
+ // 配置更改重新写入
26
+ if (isWrite) {
27
+ fs.writeFileSync(state.dirname + "/config/api.config.json", JSON.stringify(route));
28
+ }
29
+ };
@@ -0,0 +1,18 @@
1
+ module.exports = (req, res, next) => {
2
+ req.body = req.fields
3
+ let right=true
4
+ res.return = async (data, status = 1, code = 200) => {
5
+ if(!right) return
6
+ right=false
7
+ if(!data){
8
+ status=0
9
+ }
10
+ if (Number.isInteger(data)) data = data + ''
11
+ if(data instanceof Promise) data = await data
12
+ res.status(code).send({
13
+ status: status >= 1 ? 1 : 0,
14
+ data: data ? data : null
15
+ })
16
+ }
17
+ next()
18
+ }
@@ -0,0 +1,57 @@
1
+ const { decode, isJSON, encode, masTip, getTimestamp } = require('./encrypt');
2
+ const state = require('../state');
3
+ config = state.config;
4
+ _main = (req, res, next) => {
5
+ let apiCofig = require(state.dirname + '/config/api.config.json');
6
+ if (apiCofig[req.url] && apiCofig[req.url].token) {
7
+ if (!req.headers.token) {
8
+ return res.return('缺少重要参数', 0, 400);
9
+ }
10
+ const tokenInfo = decode(req.headers.token, config.token.pwd, true);
11
+ if (!tokenInfo) {
12
+ right = false;
13
+ return res.return('未知的参数 ', 0, 400);
14
+ } else if (apiCofig[req.url].permission instanceof Array) {
15
+ let right = false;
16
+ if (tokenInfo instanceof Object) apiCofig[req.url].permission.forEach(item => {
17
+
18
+ if (item == tokenInfo?._permission) {
19
+ right = true;
20
+ }
21
+ });
22
+ if (!right) return res.return('权限不足!', 0, 400);
23
+ }
24
+ if (tokenInfo instanceof String && isJSON(tokenInfo)) {
25
+ tokenInfo = JSON.parse(tokenInfo);
26
+ }
27
+ if (tokenInfo._masTime) {
28
+ if (getTimestamp() > tokenInfo._masTime) return res.return('token已过期!', 0);
29
+ delete tokenInfo._masTime;
30
+ }
31
+ req.tokenInfo = tokenInfo;
32
+ }
33
+
34
+ next();
35
+
36
+ };
37
+ /**
38
+ * @desc: 生成token
39
+ * @param {*} data 要放入token的数据
40
+ * @param {number} time token过期时间,设置此项传入数据必须为json数据,单位为s,默认为0,不过期
41
+ * @param {string} permission 角色权限
42
+ * @return {*}
43
+ */
44
+ function createToken(data, time = 0, permission,config) {
45
+ if (!isJSON(data) && !(data instanceof Object)) {
46
+ masTip('生成token失败!');
47
+ return undefined;
48
+ }
49
+ if (permission) {
50
+ data._permission = permission;
51
+ }
52
+ if (time) {
53
+ data._masTime = time * 1000 + getTimestamp();
54
+ }
55
+ return encode(data, config.token.pwd, true);
56
+ }
57
+ module.exports = { _main, createToken };
@@ -0,0 +1,4 @@
1
+ const { createCode } = require("../../src");
2
+ const path = require('path')
3
+ const dir=path.join(__dirname,"../")
4
+ createCode(dir.slice(0,dir.length-1))
@@ -0,0 +1,5 @@
1
+ const { createApis } = require("../../src");
2
+ const path = require('path');
3
+ const dir = path.join(__dirname, "../");
4
+ console.log(dir);
5
+ createApis(dir);
@@ -0,0 +1,4 @@
1
+ const { beforeIndex } = require('../../src/index');
2
+ const path = require('path');
3
+ const dir = path.join(__dirname, "../");
4
+ beforeIndex(dir.slice(0, dir.length - 1));
@@ -0,0 +1,4 @@
1
+ const { createForm } = require("../../src");
2
+ const path = require('path');
3
+ const dir = path.join(__dirname, "../");
4
+ createForm(dir.slice(0, dir.length - 1));
@@ -0,0 +1,7 @@
1
+ {
2
+ "/api/index": {},
3
+ "/api/test": {
4
+ "token": true,
5
+ "permission": ["user"]
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ {"index":"","test":"","api":"接口","user":"","get":""}
@@ -0,0 +1,22 @@
1
+ const { configSchema } = require('../../src/index');
2
+ module.exports = configSchema({
3
+ projectName: "masjs",
4
+ port: 8087,
5
+ apidoc: true,
6
+ cors: true,
7
+ logs: {
8
+ open: true,
9
+ debug: false
10
+ },
11
+ token: {
12
+ open: true,
13
+ pwd: "test"
14
+ },
15
+ useSql: true,
16
+ sql: {
17
+ host: '127.0.0.1',
18
+ user: 'root',
19
+ password: '123456',
20
+ database: 'school'
21
+ }
22
+ });
@@ -0,0 +1,23 @@
1
+ const { $sqlForm } = require('../../src/index');
2
+ module.exports = {
3
+ "test": $sqlForm([
4
+ {
5
+ "key": "name",
6
+ "type": "str",
7
+ },
8
+ {
9
+ "key": "age",
10
+ "type": "int"
11
+ }
12
+ ]),
13
+ "test22": $sqlForm([
14
+ {
15
+ "key": "name",
16
+ "type": "str"
17
+ },
18
+ {
19
+ "key": "test1",
20
+ "type": "int",
21
+ },
22
+ ])
23
+ };
package/test/index.js ADDED
@@ -0,0 +1,12 @@
1
+ const { getApp, sqlForm } = require('../src/index');
2
+ const config = require('./config/config');
3
+ const app = getApp(__dirname);
4
+ app.listen(config.port, () => {
5
+ console.log('服务器启动');
6
+ console.log(`http://localhost:${config.port}`);
7
+ if (config.apidoc) {
8
+ console.log('接口文档开启');
9
+ console.log(`http://localhost:${config.port}/doc`);
10
+ }
11
+
12
+ });
@@ -0,0 +1 @@
1
+ sdsd
@@ -0,0 +1,6 @@
1
+ 15:43:41 GET ::1 / {}
2
+ 15:45:33 GET ::1 / {}
3
+ 17:30:47 GET ::1 /doc {}
4
+ 17:30:47 POST ::1 /doc/get {}
5
+ 17:31:12 POST ::1 /doc/getBody {"name":"/api/test"}
6
+ 17:31:14 POST ::1 /api/test {}
@@ -0,0 +1,58 @@
1
+ 16:58:58 GET ::1 /doc {}
2
+ 16:58:58 POST ::1 /doc/get {}
3
+ 16:59:14 POST ::1 /doc/getBody {"name":"/api/test"}
4
+ 16:59:15 POST ::1 /api/test {}
5
+ 17:02:52 POST ::1 /api/test {}
6
+ 17:03:00 POST ::1 /api/test {}
7
+ 17:05:42 POST ::1 /doc/get {}
8
+ 17:06:56 POST ::1 /doc/getBody {"name":"/api/test"}
9
+ 17:06:56 POST ::1 /api/test {}
10
+ 17:07:06 POST ::1 /api/test {"name":"ss"}
11
+ 17:07:14 POST ::1 /doc/get {}
12
+ 17:08:08 POST ::1 /doc/get {}
13
+ 17:09:30 POST ::1 /doc/getBody {"name":"/api/test"}
14
+ 17:09:45 POST ::1 /api/test {"test":"ss"}
15
+ 17:12:38 POST ::1 /api/test {"test":"ss"}
16
+ 19:45:35 GET ::1 /doc {}
17
+ 19:45:35 GET ::1 /favicon.ico {}
18
+ 19:46:04 GET ::1 /doc {}
19
+ 19:46:05 GET ::1 /doc {}
20
+ 19:46:51 GET ::1 /doc {}
21
+ 19:46:51 GET ::1 /favicon.ico {}
22
+ 19:46:52 GET ::1 /doc {}
23
+ 19:46:52 GET ::1 /favicon.ico {}
24
+ 19:47:01 GET ::1 /doc {}
25
+ 19:47:03 GET ::1 /doc {}
26
+ 19:47:13 GET ::1 /doc {}
27
+ 19:47:13 GET ::1 /doc {}
28
+ 19:47:21 GET ::1 /doc {}
29
+ 19:47:23 GET ::1 /doc {}
30
+ 19:47:23 GET ::1 /doc {}
31
+ 19:47:34 GET ::1 /doc {}
32
+ 19:47:36 GET ::1 /doc {}
33
+ 19:48:10 GET ::1 /doc {}
34
+ 19:48:10 POST ::ffff:127.0.0.1 /doc/get {}
35
+ 19:48:17 POST ::1 /doc/getBody {"name":"/api/test"}
36
+ 19:48:18 POST ::1 /api/test {}
37
+ 19:49:57 POST ::1 /api/test {}
38
+ 19:50:50 POST ::1 /api/test {}
39
+ 19:52:09 POST ::1 /api/test {}
40
+ 19:57:47 GET ::1 / {}
41
+ 19:59:07 POST ::1 /api/test {}
42
+ 20:02:44 POST ::1 /api/test {}
43
+ 20:03:13 POST ::1 /api/test {}
44
+ 20:03:28 POST ::1 /api/test {}
45
+ 20:03:37 POST ::1 /api/test {}
46
+ 20:04:14 POST ::1 /api/test {}
47
+ 20:26:27 POST ::1 /api/test {}
48
+ 20:27:09 POST ::1 /api/test {}
49
+ 20:27:11 POST ::1 /api/test {}
50
+ 20:28:00 POST ::1 /api/test {}
51
+ 20:28:49 POST ::1 /api/test {}
52
+ 20:29:05 POST ::1 /api/test {}
53
+ 20:29:09 POST ::1 /api/test {}
54
+ 20:29:11 POST ::1 /api/test {}
55
+ 20:29:12 POST ::1 /api/test {}
56
+ 20:29:13 POST ::1 /api/test {}
57
+ 20:29:15 POST ::1 /api/test {}
58
+ 20:29:16 POST ::1 /api/test {}
@@ -0,0 +1 @@
1
+ module.exports = {"manager":{"manager":"@manager","id":"id","password":"password","user":"user"},"school":{"school":"@school","id":"id","name":"name"},"student":{"student":"@student","age":"age","id":"id","name":"name"},"teacher":{"teacher":"@teacher","ID":"ID","姓名":"姓名","年龄":"年龄","性别":"性别"},"test":{"test":"@test","age":"age","id":"id","name":"name"},"test22":{"test22":"@test22","id":"id","name":"name","test1":"test1"}}
@@ -0,0 +1,3 @@
1
+ module.exports = async (req, res) => {
2
+ res.return("hello,mas-server!");
3
+ };
@@ -0,0 +1,9 @@
1
+ const $form = require("../$form");
2
+ const { sql } = require("../../../src");
3
+
4
+ module.exports = async (req, res) => {
5
+ const data = await sql.use($form.student).select().go();
6
+ console.log(req.tokenInfo);
7
+ res.return(data);
8
+
9
+ };
@@ -0,0 +1,6 @@
1
+ const { sql } = require("mas-server");
2
+ const $form = require("@/$form");
3
+ module.exports = async (req, res) => {
4
+ const sqlData = await sql.use($form.student).delete(req.body.id).go();
5
+ res.return(sqlData, sqlData);
6
+ }
@@ -0,0 +1,6 @@
1
+ const { sql } = require("mas-server");
2
+ const $form = require("@/$form");
3
+ module.exports = async (req, res) => {
4
+ const sqlData = sql.use($form.student).select(req.body).paging(req.body).go();
5
+ res.return(sqlData, sqlData != null);
6
+ };
@@ -0,0 +1,6 @@
1
+ const { sql } = require("mas-server");
2
+ const $form = require("@/$form");
3
+ module.exports = async (req, res) => {
4
+ const sqlData =await sql.use($form.student).save(req.body).go();
5
+ res.return(sqlData, sqlData);
6
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = async (req, res) => {
2
+
3
+ res.return('hello,masjs!');
4
+ }
@@ -0,0 +1,2 @@
1
+ // const { createToken } = require("../../src");
2
+ // console.log(createToken({ "test": "sdsd" }, "user", 20));