当前位置: 首页 > 后端技术 > Node.js

node.js_1

时间:2023-04-04 01:10:55 Node.js

1、节点目录搜索glob模式匹配模式:glob模式是一种匹配模式,使用通配符(wildcardcharacters)来匹配一个文件列表(setsoffilenames)。与在shell中一样,使用*等匹配模式来匹配文件。glob库:基于Javascript实现,使用minimatch库进行匹配。主要方法:glob(pattern,[options],cb)//执行异步globsearch.glob.sync(pattern,[options])//执行同步globsearch.varglob=require("glob")glob("**/*.js",options,function(err,files){//files是一个文件名数组。})glob.sync('./src/views/**/main.js').forEach(function(filename){letbasename=path.basename(filename,path.extname(filename))lettmp=entry.split('/').splice(3)tmp.pop()letpathname=tmp.join('/')条目[路径名]=文件名});2、节点文件操作constfs=require('fs');constpath=require('路径');/***评估npm项目依赖的最小节点版本*通过读取npm项目node_modules目录,得到所有依赖的npm包package.json的最小节点版本*/functionanalyzeNodeVersions(){constcontext=path.join(process.cwd(),'node_modules')//npm项目node_modules目录的绝对路径constdirs=fs.readdirSync(context);//读取文件夹下的所有目录//读取npm包目录下的所有package.json文件,获取npm包依赖的最小节点版本letarr=[]dirs.forEach(dir=>{constfile=`${上下文}/${dir}/package.json`if(fs.existsSync(file)){arr.push(file)//收集所有目录下package.json文件的绝对路径vardata=fs.readFileSync(file);if(data){data=JSON.parse(data)if(data.engines&&data.engines.node){fs.appendFileSync('res.txt',file+'\n'+data.engines.node+'\n')}}}})console.log(arr)}analyzeNodeVersions()//在npm项目根目录执行函数3,node实现登录/***登录系统*@param{String}用户名username*@param{String}passwordpassword*/asyncfunctionlogin(username,password){constres=awaitfetch(`${BASE_URL}/websys/xxx/login.do`,{credentials:'include',方法:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8','Referer':'http://xxx.com.cn/websys/xxx/index.html'},body:qs.stringify({name:username,pwd:password})})constmatchArr=res.headers.get('set-cookie').match(newRegExp('sys_auth?=([^;]+)'));constsys_auth=matchArr&&matchArr[1];if(!sys_auth){thrownewError('登录错误,请确认用户名或密码是否正确');}cookie=`SITE=alm01;ws_auth=${ws_auth};`//全局保存logintoken}/***根据logintoken请求后续接口*/asyncfunctiongetPlans(planId){returnawaitfetch(`${BASE_URL}/websys/xxx/${planId}/plan/?planList`,{credentials:'include',method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded;字符集=UTF-8','Cookie':cookie},body:qs.stringify({pageSize:10,pageNo:5,})}).then(res=>res.json()).then(data=>data.plans.rows);}4.节点获取空闲端口网络参考文章findPort.js:constPromise=require('bluebird')letnet=require('net')functionrange(from,to){letitems=[]for(leti=from;i<=to;++i){items.push(i)}returnitems}letscanPorts=range(9527,9600)functiongetFreePort(){returnnewPromise((解决,reject)=>{if(scanPorts.length===0){console.log('分配的端口已达到最大限制')returnresolve(null)}letport=scanPorts.shift()letserver=net.createServer().listen(port)//创建服务进程绑定指定端口server.on('listening',function(){server.close()//服务器停止接收新连接,保持已有连接resolve(port)})server.on('error',function(err){//错误:地址正在使用if(err.code=='EADDRINUSE'){getFreePort()}})})}module.exports={getFreePort:getFreePort}5、节点操作excel文件