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 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

Hive : SORT BY vs ORDER BY vs DISTRIBUTE BY vs CLUSTER BY

在Apache Hive中,像SQL一样,您可以根据全局排序和分布要求决定对数据进行全局排序或局部排序。在这篇文章中,我们将了解Hive中的SORT BY,OR...

2965
来自专栏Java编程技术

结合JVM源码谈Java类加载器

之前文章 Java 类加载器揭秘 从Java层面讲解了Java类加载器的原理,这里我们结合JVM源码在稍微深入讲解下。

1021
来自专栏向治洪

android classloader双亲委托模式

概述 ClassLoader的双亲委托模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类加载器) ;...

2488
来自专栏老马说编程

(87) 类加载机制 / 计算机程序的思维逻辑

上节,我们探讨了动态代理,在前几节中,我们多次提到了类加载器ClassLoader,本节就来详细讨论Java中的类加载机制与ClassLoader。 类加载...

1978
来自专栏zhisheng

Windows 64位下安装Redis超详细教程

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(...

37612
来自专栏不止是前端

深入Node

35913
来自专栏章鱼的慢慢技术路

Go指南练习_Stringer

1232
来自专栏Java开发者杂谈

JDK1.7新特性(3):java语言动态性之脚本语言API

简要描述:其实在jdk1.6中就引入了支持脚本语言的API。这使得java能够很轻松的调用其他脚本语言。具体API的使用参考下面的代码: 1 package...

29710
来自专栏深度学习之tensorflow实战篇

mongodb11天之屠龙宝刀(六)mapreduce:mongodb中mapreduce原理与操作案例

mongodb11天之屠龙宝刀(六)mapreduce:mongodb中mapreduce原理与操作案例 一 Map/Reduce简介 MapReduc...

3946
来自专栏H2Cloud

FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过p...

6567

扫码关注云+社区

领取腾讯云代金券