nodejs常用代码片段

自动创建目录(多级)

相比起使用递归创建,调用 sheljsl 模块简单得多

const shell = require('shelljs')
const fs = require('fs')
if (!fs.existsSync(dir)) {
    shell.mkdir('-p', dir)
}

自动创建目录函数

/**
 * 创建文件,自动创建目录
 */
function createFile(newPath, txt) {
  var dir = require('path').dirname(newPath)
  if (!require('fs').existsSync(dir)) {
    require('shelljs').mkdir('-p', dir)
  }
  require('fs').writeFileSync(newPath, txt)
}

ejs 自定义函数的使用

版本:2.6.1 安装:npm install ejs

在模板中使用自定义函数处理数据的Demo

const ejs = require('ejs')
ejs.delimiter = '%'
// 自定义函数 返回首字母大写的字符串
const def_func={
  capitalize(str) {
    return str ? (str.substring(0, 1).toUpperCase() + str.substring(1)) : str
  }
}

const config={
    title:'me is test'
}
var result=ejs.render('<%= capitalize(title) %>', Object.assign(def_func,config)) //Test

//const path='./template/test.txt'
//ejs.renderFile(path, Object.assign(def_func, config), {},function(err,str){
//     //str 渲染结果
//})

获取指定目录下所有指定格式文件

readAllFile(root,reg) 参数传递正则

  • 获取所有js文件:readAllFile('D:/..',/\.js$/)
  • 获取所有json文件:readAllFile('D:/..',/\.json$/)
/*
 * 读取指定文件夹下的全部文件,可通过正则进行过滤,返回文件路径数组
 * @param root 指定文件夹路径
 * @param reg 对文件的过滤正则表达式,可选参数,示例: 获取指定目录下所有js文件:/\.js$/
 * 
*/
function readAllFile(root, reg) {
  var resultArr = []
  return (function fn(root, reg) {
    var fs = require('fs')
    if (fs.existsSync(root)) {
      //文件或文件夹存在
      var stat = fs.lstatSync(root) // 对于不存在的文件或文件夹,此函数会报错
      if (stat.isDirectory()) {
        // 文件夹
        var files = fs.readdirSync(root)
        files.forEach(function(file) {
          var t = fn(root + '/' + file, reg)
          resultArr = resultArr.concat(t)
        })
      } else {
        if (reg !== undefined) {
          if (typeof reg.test == 'function' && reg.test(root)) {
            resultArr.push(root)
          }
        } else {
          resultArr.push(root)
        }
      }
    }
    return resultArr
  })()
}

nodejs 获取传入参数的封装

传入需要获取的 keys及前缀(可选,默认--)

调用:node index.js --target test 接收:const config=loadConifg(['target'],'--') //config.target----->test

/**
 * 根据参数数组加载参数
 * @param {Array} params 键值
 * @param {String} prefix 前缀 默认为 --
 */
function loadConfig(params, prefix) {
  if (typeof params !== 'object' || params.length === 0) return {}
  var config = {}
  prefix = prefix || '--'
  var args = process.argv
  for (let i = 0; i < args.length; i++) {
    var key = args[i].indexOf(prefix) === 0 ? args[i].replace(prefix, '') : ''
    if (key && params.indexOf(key) > -1 && i < args.length - 1) {
      config[key] = args[i + 1]
    }
  }
  return config
}

递归根据最后一级ID找父节点属性

方法定义

/**
 * 查找父节点
 * @param {String} key 对象匹配键值
 * @param {String} value 对象匹配值
 * @param {Array} items 带children节点的数组
 * @param {Array} resultArr 父对象结果集
 */
function fn(key, value, items, resultArr) {
  var checkResult = false
  for (let index = 0; index < items.length; index++) {
    const e = items[index]
    checkResult =
      e[key] === value || (e.children && fn(key, value, e.children, resultArr))
    if (checkResult) {
      resultArr.push(e)
      break
    }
  }
  return checkResult
}

调用

var arr = []
fn(
  'value',
  2,
  [
    {
      text: 't1',
      value: 1,
      children: [
        {
          text: 't2',
          value: 2
        }
      ]
    }
  ],
  arr
)
console.log(arr)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • winform复制文件到指定目录

    易墨
  • js实用方法记录-指不定哪天就会用到的js方法

    易墨
  • asp.net mvc项目自定义区域

    2.Code:在Global.asax中添加注册区域-->AreaRegistration.RegisterAllAreas();

    易墨
  • 笔记:NEC QTP 第四个实例

    ExecuteFile"C:\Users\admin\Documents\Unified Functional Testing\ClassCol.vbs"

    超级大猪
  • 基础练习 数的读法

      Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万个碱基对,它们从0开始编号,到几百万,几千万,甚至上亿。   ...

    刘开心_1266679
  • 64位Windows 10下如何搭建CUNIT环境

    Windows下如何搭建CUNIT环境资料很多,但是错误不少或者讲解不清晰,很容易让人跌入坑中,现在介绍如下。

    小老鼠
  • JDK源码分析-ReentrantReadWriteLock

    前面分析过 ReentrantLock「JDK源码分析-ReentrantLock」,它是一种互斥的可重入锁,可用于处理并发场景下的线程安全问题。而很多时候会出...

    WriteOnRead
  • 【LeetCode10】盛最多水的容器

    图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

    Sam Gor
  • Java读写锁是如何实现的

    最近做的一个小项目中有这样的需求:整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(读>>写)更新问题。...

    黄泽杰
  • Java--读写锁的实现原理

    最近做的一个小项目中有这样的需求: 整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(读>>写)更新问题...

    屈定

扫码关注云+社区

领取腾讯云代金券