1、node目录查找
Glob Pattern匹配模式:glob patterns是一种匹配模式,运用通配符(wildcard characters)来匹配一个文件列表(sets of filenames)。像在shell里面,用*等匹配模式来匹配文件。

glob库:基于Javascript实现,使用minimatch库进行匹配。
主要方法:
glob(pattern, [options], cb) // Perform an asynchronous glob search.
glob.sync(pattern, [options]) // Perform a synchronous glob search.

var glob = require("glob") glob("**/*.js", options, function (err, files) { // files is an array of filenames. }) glob.sync('./src/views/**/main.js').forEach(function(filename) { let basename = path.basename(filename, path.extname(filename)) let tmp = entry.split('/').splice(3) tmp.pop() let pathname = tmp.join('/') entries[pathname] = filename });

2、node文件操作

const fs = require('fs'); const path = require('path'); /** * 评估npm项目所依赖的最低node版本 * 通过读取npm项目node_modules目录,获取所有npm包package.json中说明依赖的最低node版本 */ function analyzeNodeVersions() { const context = path.join(process.cwd(), 'node_modules') // npm项目node_modules目录绝对路径 const dirs = fs.readdirSync(context); // 读取文件夹下所有目录 // 读取所有npm包目录下 package.json 文件,获取npm包依赖的最低node版本 let arr = [] dirs.forEach(dir => { const file = `${context}/${dir}/package.json` if (fs.existsSync(file)) { arr.push(file) // 收集所有目录下package.json文件绝对路径 var data = 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} password 密码 */ async function login(username, password) { const res = await fetch(`${BASE_URL}/websys/xxx/login.do`, { credentials: 'include', method: '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 }) }) const matchArr = res.headers.get('set-cookie').match(new RegExp('sys_auth?=([^;]+)')); const sys_auth = matchArr && matchArr[1]; if (!sys_auth) { throw new Error('登录错误,请确认用户名或密码是否正确'); } cookie = `SITE=alm01; ws_auth=${ws_auth};` // 全局保存登录token } /** * 依据登录token请求后续接口 */ async function getPlans(planId) { return await fetch(`${BASE_URL}/websys/xxx/${planId}/plan/?planList`, { credentials: 'include', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Cookie': cookie }, body: qs.stringify({ pageSize: 10, pageNo: 5, }) }) .then(res => res.json()) .then(data => data.plans.rows); }

4、node获取空闲端口
网络参考文章

findPort.js: const Promise = require('bluebird') let net = require('net') function range(from, to) { let items = [] for (let i = from; i <= to; ++i) { items.push(i) } return items } let scanPorts = range(9527, 9600) function getFreePort(){ return new Promise((resolve, reject)=>{ if (scanPorts.length === 0) { console.log('分配端口已达最大限额') return resolve(null) } let port = scanPorts.shift() let server = net.createServer().listen(port) //创建服务进程绑定指定端口 server.on('listening',function() { server.close() //服务器停止接收新的连接,保持现有连接 resolve(port) }) server.on('error',function(err){ // Error: Address In Use if(err.code == 'EADDRINUSE') { getFreePort() } }) }) } module.exports = { getFreePort: getFreePort }

5、node操作excel文件


JohnsonGH
32 声望1 粉丝