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 +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
|
+
};
|