ming_node 2.5.0 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -55,7 +55,7 @@ app.get("/getSession",(req,res)=>{
55
55
  ```javascript
56
56
  +async function(){
57
57
  M =await new Promise((v)=>require('https').get("https://minglie.github.io/js/ming_node.js",(q)=>{d='';q.on('data',(a)=>d+=a);q.on('end',()=>v(eval(d)))}))
58
- var app=M.server();
58
+ var app=M.server();
59
59
  app.listen(8888);
60
60
  app.get("/",async (req,res)=>{
61
61
  app.redirect("/index.html",req,res)
@@ -110,13 +110,21 @@ app.listen(8888);
110
110
  app.get("/baidu",(req,res)=>{
111
111
  console.log(req.params);
112
112
  //响应html文本
113
- // res.renderHtml("hello woed")
113
+ res.renderHtml("hello woed")
114
114
  //响应js文本
115
- //res.renderJs("alert(5)")
115
+ res.renderJs("alert(5)")
116
116
  //响应本地文件
117
- //res.renderUrl("file:D:/G/ming_node/test/test.html");
117
+ res.renderUrl("file:D:/G/ming_node/test/test.html");
118
118
  //响应百度首页
119
119
  res.renderUrl("https://www.baidu.com/index.html");
120
+ //响应一个网络文件,支持二进制
121
+ res.sendFile("https://ming/a.txt");
122
+ //响应一个本地文件,支持二进制
123
+ res.sendFile("file:C:/Users/a.txt");
124
+ //响应一个网络文件,支持二进制,浏览器直接下载
125
+ res.sendFile("https://ming/a.txt",true);
126
+ //响应一个本地文件,支持二进制,浏览器直接下载
127
+ res.sendFile("file:C:/Users/a.txt",true);
120
128
  })
121
129
 
122
130
  ```
@@ -0,0 +1,3 @@
1
+ let restart= require("../utils/nodemon/restart");
2
+ restart("test.js","test.js")
3
+
@@ -0,0 +1,8 @@
1
+ var M=require("../index");
2
+
3
+ app=M.server()
4
+ app.listen(8888)
5
+
6
+ app.get(["/h15","/h16","/h18888"],(req,res)=>{
7
+ res.send("BBBBXXXEEEEE")
8
+ })
package/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * By : Minglie
4
4
  * QQ: 934031452
5
5
  * Date :2021.12.01
6
- * version :2.5.0
6
+ * version :2.9.1
7
7
  */
8
8
  var http = require('http');
9
9
  var https = require('https');
@@ -437,23 +437,22 @@ M.import=async function (url,callback){
437
437
  /**
438
438
  *下载图片
439
439
  */
440
- M.download = function (url, file, callback) {
440
+ M.download =async function (url, file) {
441
441
  var func = http;
442
442
  if (url.indexOf("https") >= 0) {
443
443
  func = https;
444
444
  }
445
- func.get(url, function (res) {
446
- res.setEncoding('binary');//转成二进制
447
- var content = '';
448
- res.on('data', function (data) {
449
- content += data;
450
- }).on('end', function () {
451
- if (callback) callback();
452
- fs.writeFile(file, content, 'binary', function (err) {
453
- if (err) throw err;
454
- });
445
+ return new Promise(((resolve, reject) => {
446
+ func.get(url, function (res) {
447
+ let writeStream = fs.createWriteStream(file);
448
+ res.on("end",d=>{
449
+ resolve(file);
450
+ }).on("error",e=>{
451
+ reject(e);
452
+ }).pipe(writeStream);
455
453
  });
456
- });
454
+ }))
455
+
457
456
  }
458
457
  /**
459
458
  *下载所有图片
@@ -823,10 +822,8 @@ M.readLine =async function (file, callback) {
823
822
  }
824
823
  });
825
824
  input.on('end', function () {
826
- if (remaining.length > 0) {
827
- resolve(lineCount);
828
- callback(remaining);
829
- }
825
+ resolve(lineCount);
826
+ callback(remaining);
830
827
  });
831
828
  } )
832
829
  }
@@ -1512,13 +1509,15 @@ M.server = function () {
1512
1509
  let o = {}
1513
1510
  o[key] = value;
1514
1511
  let r_cookie = Object.assign(o, cfg)
1515
- res.setHeader("Set-Cookie", querystring.stringify(r_cookie, " ;"));
1512
+ let setCookies= querystring.stringify(r_cookie, " ;");
1513
+ setCookies= setCookies.replace(/%2F/g,'/');
1514
+ res.setHeader("Set-Cookie", setCookies);
1516
1515
  }
1517
1516
  if (true) {
1518
1517
  Object.defineProperty(req, 'session', {
1519
1518
  set: function (o) {
1520
1519
  let sessionValue = req.cookies.sessionid || M.randomStr();
1521
- res.cookie("sessionid", sessionValue)
1520
+ res.cookie("sessionid", sessionValue,{Path:"/"})
1522
1521
  M.sessions[sessionValue] = o;
1523
1522
  },
1524
1523
  get: function () {
@@ -1577,6 +1576,47 @@ M.server = function () {
1577
1576
  G._end(req,text);
1578
1577
  }
1579
1578
 
1579
+
1580
+ res.sendFile= async function (url,isDownLoad=false) {
1581
+ let extname = path.extname(url);
1582
+ let fileName=M.getFileNameByUrl(url);
1583
+ if(url.startsWith("file")){
1584
+ url= url.substring(5);
1585
+ res.setHeader("Access-Control-Allow-Origin", "*");
1586
+ res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
1587
+ res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
1588
+ res.setHeader("X-Powered-By", ' 3.2.1');
1589
+ if(isDownLoad){
1590
+ res.setHeader("Content-Disposition", "attachment;filename="+encodeURIComponent(fileName,"utf-8"));
1591
+ }
1592
+ res.writeHead(200, {"Content-Type": "" + (privateObj.staticMime[extname] || 'text/html') + ";charset='utf-8'",});
1593
+ fs.createReadStream(url).on("end",d=>{})
1594
+ .on("error",e=>{
1595
+ console.error(e);
1596
+ }).pipe(res);
1597
+ }else {
1598
+ var func = http;
1599
+ if (url.indexOf("https") >= 0) {
1600
+ func = https;
1601
+ }
1602
+ func.get(url, function (res1) {
1603
+ res.setHeader("Access-Control-Allow-Origin", "*");
1604
+ res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
1605
+ res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
1606
+ res.setHeader("X-Powered-By", ' 3.2.1');
1607
+ if(isDownLoad){
1608
+ res.setHeader("Content-Disposition", "attachment;filename="+encodeURIComponent(fileName,"utf-8"));
1609
+ }
1610
+ res.writeHead(200, {"Content-Type": "" + (privateObj.staticMime[extname] || 'text/html') + ";charset='utf-8'",});
1611
+ res1.on("end",d=>{})
1612
+ .on("error",e=>{
1613
+ console.error(e)
1614
+ }).pipe(res);
1615
+ });
1616
+ }
1617
+ }
1618
+
1619
+
1580
1620
  res.render = async function (url) {
1581
1621
  res.alreadySend = true;
1582
1622
  let text="";
@@ -1626,6 +1666,14 @@ M.server = function () {
1626
1666
  res.end();
1627
1667
  G._end(req,text);
1628
1668
  }
1669
+ //扩充res一个renderHtml方法
1670
+ res.renderCss = function (text) {
1671
+ res.alreadySend = true;
1672
+ res.writeHead(200, {"Content-Type": "text/css;charset='utf-8'"});
1673
+ res.write(text);
1674
+ res.end();
1675
+ G._end(req,text);
1676
+ }
1629
1677
  res.redirect = function (url) {
1630
1678
  res.alreadySend = true;
1631
1679
  res.writeHead(302, {'Content-Type': 'text/html; charset=utf-8', 'Location': url});
@@ -1740,7 +1788,7 @@ M.server = function () {
1740
1788
  G._server = callback;
1741
1789
  }
1742
1790
  app.use=function (url,callback){
1743
- if(typeof url === 'function' || typeof url === 'object' ){
1791
+ if(typeof url === 'function' || (typeof url === 'object' && !Array.isArray(url))){
1744
1792
  let plugin=url;
1745
1793
  let args=callback;
1746
1794
  if(plugin.installed){
@@ -1777,62 +1825,86 @@ M.server = function () {
1777
1825
  app.use(plugin,pluginParams)
1778
1826
  }
1779
1827
 
1828
+ app.registServer=function (url,callback,single){
1829
+ if (Array.isArray(url)) {
1830
+ url.forEach(u=>{
1831
+ single(u,callback);
1832
+ })
1833
+ } else {
1834
+ single(url,callback);
1835
+ }
1836
+ }
1837
+
1780
1838
  /**
1781
1839
  * 注册get请求
1782
1840
  */
1783
1841
  app.get = function (url, callback) {
1784
- url = M.formatUrl(url);
1785
- var realUrl = url;
1786
- if (url.indexOf(":") > 0) {
1787
- url = url.substr(0, url.indexOf(":"));
1788
- G._rest[url] = realUrl;
1842
+ const single=(url,callback)=>{
1843
+ url = M.formatUrl(url);
1844
+ var realUrl = url;
1845
+ if (url.indexOf(":") > 0) {
1846
+ url = url.substr(0, url.indexOf(":"));
1847
+ G._rest[url] = realUrl;
1848
+ }
1849
+ G._get[url] = callback;
1789
1850
  }
1790
-
1791
- G._get[url] = callback;
1851
+ app.registServer(url,callback,single)
1792
1852
  }
1793
1853
  /**
1794
1854
  *注册post请求
1795
1855
  */
1796
1856
  app.post = function (url, callback) {
1797
- url = M.formatUrl(url);
1798
- var realUrl = url;
1799
- if (url.indexOf(":") > 0) {
1800
- url = url.substr(0, url.indexOf(":"));
1801
- G._rest[url] = realUrl;
1857
+ const single=(url,callback)=>{
1858
+ url = M.formatUrl(url);
1859
+ var realUrl = url;
1860
+ if (url.indexOf(":") > 0) {
1861
+ url = url.substr(0, url.indexOf(":"));
1862
+ G._rest[url] = realUrl;
1863
+ }
1864
+ G._post[url] = callback;
1802
1865
  }
1803
- G._post[url] = callback;
1866
+ app.registServer(url,callback,single)
1804
1867
  }
1805
1868
 
1806
1869
  app.put = function (url, callback) {
1807
- url = M.formatUrl(url);
1808
- var realUrl = url;
1809
- if (url.indexOf(":") > 0) {
1810
- url = url.substr(0, url.indexOf(":"));
1811
- G._rest[url] = realUrl;
1870
+ const single=(url,callback)=>{
1871
+ url = M.formatUrl(url);
1872
+ var realUrl = url;
1873
+ if (url.indexOf(":") > 0) {
1874
+ url = url.substr(0, url.indexOf(":"));
1875
+ G._rest[url] = realUrl;
1876
+ }
1877
+ G._put[url] = callback;
1812
1878
  }
1813
- G._put[url] = callback;
1879
+ app.registServer(url,callback,single)
1814
1880
  }
1815
1881
 
1816
1882
  app.delete = function (url, callback) {
1817
- url = M.formatUrl(url);
1818
- var realUrl = url;
1819
- if (url.indexOf(":") > 0) {
1820
- url = url.substr(0, url.indexOf(":"));
1821
- G._rest[url] = realUrl;
1883
+ const single=(url,callback)=>{
1884
+ url = M.formatUrl(url);
1885
+ var realUrl = url;
1886
+ if (url.indexOf(":") > 0) {
1887
+ url = url.substr(0, url.indexOf(":"));
1888
+ G._rest[url] = realUrl;
1889
+ }
1890
+ G._delete[url] = callback;
1822
1891
  }
1823
- G._delete[url] = callback;
1892
+ app.registServer(url,callback,single);
1824
1893
  }
1825
1894
  /**
1826
1895
  *注册任意请求方法的请求
1827
1896
  */
1828
1897
  app.mapping = function (url, callback) {
1829
- url = M.formatUrl(url);
1830
- var realUrl = url;
1831
- if (url.indexOf(":") > 0) {
1832
- url = url.substr(0, url.indexOf(":"));
1833
- G._rest[url] = realUrl;
1898
+ const single=(url,callback)=>{
1899
+ url = M.formatUrl(url);
1900
+ var realUrl = url;
1901
+ if (url.indexOf(":") > 0) {
1902
+ url = url.substr(0, url.indexOf(":"));
1903
+ G._rest[url] = realUrl;
1904
+ }
1905
+ G._mapping[url] = callback;
1834
1906
  }
1835
- G._mapping[url] = callback;
1907
+ app.registServer(url,callback,single);
1836
1908
  }
1837
1909
 
1838
1910
 
package/package.json CHANGED
@@ -46,5 +46,5 @@
46
46
  "scripts": {
47
47
  "test": "echo \"Error: no test specified\" && exit 1"
48
48
  },
49
- "version": "2.5.0"
49
+ "version": "2.9.1"
50
50
  }
@@ -10,7 +10,7 @@ class AbstractBaseRest{
10
10
 
11
11
  async add(obj){}
12
12
  async delete(obj){}
13
- async list({page,num,...queryCase}){}
13
+ async list({page,num,order,...queryCase}){}
14
14
  async listAll(obj){}
15
15
  async update(obj){}
16
16
  async getChildenList(id,queryCase){}
@@ -42,9 +42,9 @@ class AbstractBaseRest{
42
42
  });
43
43
 
44
44
  app.get(`${this.prefix}/:id`,async (req,res)=>{
45
- const {id,page,num,...queryCase}=req.params;
45
+ const {id,page,num,order,...queryCase}=req.params;
46
46
  if(id==undefined){
47
- let r=await this.list({page,num,queryCase});
47
+ let r=await this.list({page,num,order,queryCase});
48
48
  res.send(M.successResult(r));
49
49
  }else {
50
50
  let r=await this.getById(req.params.id);
@@ -27,12 +27,12 @@ class ApiCloudBaseRestApi extends AbstractBaseRestApi{
27
27
  return r[0];
28
28
  }
29
29
 
30
- async list({page=1,num=10,queryCase}){
30
+ async list({page=1,num=10,order="createdAt ASC",queryCase}){
31
31
  page=Number.parseInt(page);
32
32
  num=Number.parseInt(num);
33
33
  let limit=num;
34
34
  let skip= (page-1)*num
35
- let r=await this.tableClient.list(queryCase,limit,skip,"createdAt ASC");
35
+ let r=await this.tableClient.list(queryCase,limit,skip,order);
36
36
  return r;
37
37
  }
38
38
 
@@ -29,7 +29,7 @@ class FileBaseRestApi extends AbstractBaseRestApi{
29
29
  return r;
30
30
  }
31
31
 
32
- async list({page=1,num=10,queryCase}){
32
+ async list({page=1,num=10,order,queryCase}){
33
33
  page=Number.parseInt(page);
34
34
  num=Number.parseInt(num);
35
35
  if (page <= 0) page = 1;
@@ -25,7 +25,7 @@ class MemoryBaseRestApi extends AbstractBaseRestApi{
25
25
  return r;
26
26
  }
27
27
 
28
- async list({page,num,queryCase}){
28
+ async list({page,num,order,queryCase}){
29
29
  let r= this.memoryDb.listByPage(page,num,queryCase);
30
30
  return r;
31
31
  }
@@ -28,7 +28,7 @@ class MongoDbBaseRestApi extends AbstractBaseRestApi{
28
28
  return r;
29
29
  }
30
30
 
31
- async list({page=1,num=10,queryCase}){
31
+ async list({page=1,num=10,order,queryCase}){
32
32
  page=Number.parseInt(page);
33
33
  num=Number.parseInt(num);
34
34
  let tableName=this.tableName;
@@ -30,9 +30,9 @@ class MysqlBaseRestApi extends AbstractBaseRestApi{
30
30
  return r;
31
31
  }
32
32
 
33
- async list({page,num,queryCase}){
34
- let queryCaseStr= MysqlBaseRestApi.obj2QueryCase(queryCase);
35
- let r= this.dbBaseMapper.selectPage({page,num,queryCase:queryCaseStr});
33
+ async list({page,num,order,queryCase}){
34
+ let queryCaseStr= MysqlBaseRpcApi.obj2QueryCase(queryCase);
35
+ let r= this.dbBaseMapper.selectPage({order,page,num,queryCase:queryCaseStr});
36
36
  return r;
37
37
  }
38
38
 
@@ -11,7 +11,7 @@ class AbstractBaseRpcApi{
11
11
 
12
12
  async add(obj){}
13
13
  async delete(obj){}
14
- async list({page,num,...queryCase}){}
14
+ async list({page,num,order,...queryCase}){}
15
15
  async listAll(obj){}
16
16
  async update(obj){}
17
17
  async getChildenList(id,queryCase){}
@@ -51,10 +51,13 @@ class AbstractBaseRpcApi{
51
51
  });
52
52
 
53
53
  app.get(`${this.prefix}/list`,async (req,res)=>{
54
- const {page,num,...queryCase}=req.params;
55
- let r=await this.list({page,num,queryCase});
54
+ let {page,num,order,...queryCase}=req.params;
55
+ if(!order){
56
+ order=null;
57
+ }
58
+ let r=await this.list({page,num,order,queryCase});
56
59
  res.send(M.successResult(r));
57
- })
60
+ });
58
61
 
59
62
  /**
60
63
  * 如果有parent_id才能返回树
@@ -27,12 +27,12 @@ class ApiCloudBaseRpcApi extends AbstractBaseRpcApi{
27
27
  return r[0];
28
28
  }
29
29
 
30
- async list({page=1,num=10,queryCase}){
30
+ async list({page=1,num=10,order="createdAt ASC",queryCase}){
31
31
  page=Number.parseInt(page);
32
32
  num=Number.parseInt(num);
33
33
  let limit=num;
34
34
  let skip= (page-1)*num
35
- let rows=await this.tableClient.list(queryCase,limit,skip,"createdAt ASC");
35
+ let rows=await this.tableClient.list(queryCase,limit,skip,order);
36
36
  let countResult=await this.tableClient.count(queryCase);
37
37
  return {rows, total:countResult.count}
38
38
  }
@@ -29,7 +29,7 @@ class FileBaseRpcApi extends AbstractBaseRpcApi{
29
29
  return r;
30
30
  }
31
31
 
32
- async list({page=1,num=10,queryCase}){
32
+ async list({page=1,num=10,order, queryCase}){
33
33
  page=Number.parseInt(page);
34
34
  num=Number.parseInt(num);
35
35
  if (page <= 0) page = 1;
@@ -25,7 +25,7 @@ class MemoryBaseRpcApi extends AbstractBaseRpcApi{
25
25
  return r;
26
26
  }
27
27
 
28
- async list({page,num,queryCase}){
28
+ async list({page,num,order,queryCase}){
29
29
  let r= this.memoryDb.listByPage(page,num,queryCase);
30
30
  return r;
31
31
  }
@@ -28,7 +28,7 @@ class MongoDbBaseRpcApi extends AbstractBaseRpcApi{
28
28
  return r;
29
29
  }
30
30
 
31
- async list({page=1,num=10,queryCase}){
31
+ async list({page=1,num=10,order,queryCase}){
32
32
  page=Number.parseInt(page);
33
33
  num=Number.parseInt(num);
34
34
  let tableName=this.tableName;
@@ -30,9 +30,9 @@ class MysqlBaseRpcApi extends AbstractBaseRpcApi{
30
30
  return r;
31
31
  }
32
32
 
33
- async list({page,num,queryCase}){
33
+ async list({page,num,order,queryCase}){
34
34
  let queryCaseStr= MysqlBaseRpcApi.obj2QueryCase(queryCase);
35
- let r= this.dbBaseMapper.selectPage({page,num,queryCase:queryCaseStr});
35
+ let r= this.dbBaseMapper.selectPage({order,page,num,queryCase:queryCaseStr});
36
36
  return r;
37
37
  }
38
38
 
@@ -0,0 +1,38 @@
1
+ const M = require('../../index.js');
2
+ const { spawn } = require('child_process')
3
+
4
+ let childProcess;
5
+ let timer = null;
6
+
7
+ function debounce(mainFile) {
8
+ timer && clearTimeout(timer)
9
+ timer = setTimeout(() => {
10
+ //console.log('nodemon')
11
+ childProcess && childProcess.kill()
12
+ childProcess = spawn('node', [mainFile], {
13
+ stdio: [process.stdin, process.stdout, process.stderr]
14
+ });
15
+ }, 800)
16
+ }
17
+
18
+ function watchSigleFile(file,mainFile){
19
+ M.watchFile(file,({file,event})=>{
20
+ if(event=="change"){
21
+ console.log("change:"+file);
22
+ debounce(mainFile)
23
+ }
24
+ })
25
+ }
26
+
27
+ module.exports = function (watchFile,mainFile){
28
+ debounce(mainFile);
29
+ let r=[];
30
+ if(Array.isArray(watchFile)) {
31
+ r=watchFile;
32
+ }else {
33
+ r.push(watchFile);
34
+ }
35
+ r.forEach(u=>{
36
+ watchSigleFile(u,mainFile);
37
+ })
38
+ };