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文件
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。