ming_node 2.5.0 → 2.9.1
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.
- package/README.md +12 -4
- package/beforeTest/MingNodemonUtilsTest.js +3 -0
- package/beforeTest/test.js +8 -0
- package/index.js +123 -51
- package/package.json +1 -1
- package/plugins/BaseRestApi/AbstractBaseRestApi.js +3 -3
- package/plugins/BaseRestApi/ApiCloudBaseRestApi.js +2 -2
- package/plugins/BaseRestApi/FileBaseRestApi.js +1 -1
- package/plugins/BaseRestApi/MemoryBaseRestApi.js +1 -1
- package/plugins/BaseRestApi/MongoDbBaseRestApi.js +1 -1
- package/plugins/BaseRestApi/MysqlBaseRestApi.js +3 -3
- package/plugins/BaseRpcApi/AbstractBaseRpcApi.js +7 -4
- package/plugins/BaseRpcApi/ApiCloudBaseRpcApi.js +2 -2
- package/plugins/BaseRpcApi/FileBaseRpcApi.js +1 -1
- package/plugins/BaseRpcApi/MemoryBaseRpcApi.js +1 -1
- package/plugins/BaseRpcApi/MongoDbBaseRpcApi.js +1 -1
- package/plugins/BaseRpcApi/MysqlBaseRpcApi.js +2 -2
- package/utils/nodemon/restart.js +38 -0
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
|
-
|
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
|
-
|
113
|
+
res.renderHtml("hello woed")
|
114
114
|
//响应js文本
|
115
|
-
|
115
|
+
res.renderJs("alert(5)")
|
116
116
|
//响应本地文件
|
117
|
-
|
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
|
```
|
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.
|
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
|
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
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
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
|
-
|
827
|
-
|
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
|
-
|
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
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
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
|
-
|
1798
|
-
|
1799
|
-
|
1800
|
-
|
1801
|
-
|
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
|
-
|
1866
|
+
app.registServer(url,callback,single)
|
1804
1867
|
}
|
1805
1868
|
|
1806
1869
|
app.put = function (url, callback) {
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
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
|
-
|
1879
|
+
app.registServer(url,callback,single)
|
1814
1880
|
}
|
1815
1881
|
|
1816
1882
|
app.delete = function (url, callback) {
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
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
|
-
|
1892
|
+
app.registServer(url,callback,single);
|
1824
1893
|
}
|
1825
1894
|
/**
|
1826
1895
|
*注册任意请求方法的请求
|
1827
1896
|
*/
|
1828
1897
|
app.mapping = function (url, callback) {
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
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
|
-
|
1907
|
+
app.registServer(url,callback,single);
|
1836
1908
|
}
|
1837
1909
|
|
1838
1910
|
|
package/package.json
CHANGED
@@ -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,
|
35
|
+
let r=await this.tableClient.list(queryCase,limit,skip,order);
|
36
36
|
return r;
|
37
37
|
}
|
38
38
|
|
@@ -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=
|
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
|
-
|
55
|
-
|
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,
|
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
|
}
|
@@ -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
|
+
};
|