注意,前情提示:

本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》

传送门https://blog.csdn.net/qq_37860634/article/details/103781523

在/api/demo/文件夹下面创建copyFileOrFolder.js和deleteFileOrFolder.js

copyFileOrFolder.js代码内容

const $g = global.SG.$g, fs = global.SG.fs, router = global.SG.router, path = global.SG.path;

module.exports = global.SG.router;

const copyFileOrFolerPath = "./json/demo/demo.json";//被复制的文件路径

const pasteFileOrFolerPath = "./json/demoBak/demoBak.json";//粘贴文件路径

// const copyFileOrFolerPath = "./json";//被复制的文件夹路径

// const pasteFileOrFolerPath = "./temp";//粘贴文件夹路径

const copyDir = (src, dst) => {

//读取目录中的所有文件/目录

fs.readdir(src, (err, paths) => {

if (err) throw err;

paths.forEach(path => {

const _src = src + "/" + path, _dst = dst + "/" + path;

let readable, writable;

fs.stat(_src, (err, st) => {

if (err) throw err;

if (st.isFile()) {//是文件

readable = fs.createReadStream(_src);//创建读取流

writable = fs.createWriteStream(_dst);//创建写入流

readable.pipe(writable);//通过管道来传输流

} else {//是文件夹

copyFolder(_src, _dst);//如果是目录则递归调用自身

}

});

});

});

};

//复制文件夹

const copyFolder = (src, dst) => fs.existsSync(dst) ? copyDir(src, dst) : fs.mkdir(dst, () => copyDir(src, dst));

const mkdirs = $g.dir.mkdirsByFilePath;//递归创建文件夹目录(基于文件路径)

const resJson = (req, res) => {

fs.copyFile(copyFileOrFolerPath, pasteFileOrFolerPath, err => {

$g.json.res(req, res, `复制${copyFileOrFolerPath}${err ? "失败" : "成功"}`, {err, copyFileOrFolerPath, pasteFileOrFolerPath}, true);

});

};

//复制并且粘贴(覆盖无提示)文件(all方法支持POST、GET、PUT、PATCH、DELETE传参方式)

router.all("/demo/copyFileOrFolder", (req, res) => {

if (fs.statSync(copyFileOrFolerPath).isFile()) {//是文件

mkdirs(pasteFileOrFolerPath, () => resJson(req, res));//复制文件

} else {//是文件夹

copyFolder(copyFileOrFolerPath, pasteFileOrFolerPath);//复制文件夹

$g.json.res(req, res, `复制${copyFileOrFolerPath}成功`, {err: null, copyFileOrFolerPath, pasteFileOrFolerPath}, true);

}

});

deleteFileOrFolder.js代码内容

const $g = global.SG.$g, fs = global.SG.fs, router = global.SG.router, path = global.SG.path;

module.exports = global.SG.router;

// const deleteFileOrFolderPath = "./json/demoBak/demoBak.json";//被删除文件路径

const deleteFileOrFolderPath = "./json/demoBak";//被删除文件夹路径

const deleteFileOrFolderRecursive = (url, callback) => {

//判断给定的路径是否存在

fs.exists(url, exists => {

if (exists) {

if (fs.statSync(url).isFile()) {//是文件

fs.unlink(url, err => callback(err));

} else {//是文件夹

let __del = (url, callback) => {

let files = [];

//判断给定的路径是否存在

files = fs.readdirSync(url);//返回文件和子目录的数组

files.forEach((file, index) => {

let curPath = path.join(url, file);

if (fs.statSync(curPath).isDirectory()) {

__del(curPath);//fs.statSync同步读取文件夹文件,如果是文件夹,在重复触发函数

} else {

fs.unlinkSync(curPath);

}

});

fs.rmdirSync(url);//清除文件夹

callback && callback();

};

__del(url, callback);

}

} else {

callback("亲,您提供的是一个子虚乌有的路径!");

}

});

};

const resJson = (req, res, err) => $g.json.res(req, res, `删除${deleteFileOrFolderPath}${err ? "失败" : "成功"}`, {err, deleteFileOrFolderPath}, !err);

//删除文件or文件夹(覆盖无提示)文件(all方法支持POST、GET、PUT、PATCH、DELETE传参方式)

router.all("/demo/deleteFileOrFolder", (req, res) => deleteFileOrFolderRecursive(deleteFileOrFolderPath, err => resJson(req, res, err)));

在index.js最后一行加入

app.use(API_PATH, require(`.${API_PATH}/demo/copyFileOrFolder`));//复制文件or文件夹

app.use(API_PATH, require(`.${API_PATH}/demo/deleteFileOrFolder`));//删除文件or文件夹

运行

node index

js 删除服务器文件,Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录...相关推荐

  1. JavaScript之后端Web服务器开发Node.JS基本模块学习篇

    JavaScript之后端Web服务器开发Node.JS基本模块学习篇 基本模块 fs文件系统模块 stream支持流模块 http crypto加密模块 基本模块 因为Node.js是运行在服务区端 ...

  2. Node.js知识梳理之Node.js安装

    Node.js官网:nodejs.org/en/ 用户进入官网,会自动推荐适合于开发者电脑的Node.js版本,官网提示我下载适用于windows(x64)的版本.官网有两个版本LTS(长期稳定)版和 ...

  3. Node.js(一、Node.js基础、模块加载机制、包等)

    Node.js(一.Node.js基础.模块加载机制.包等) 1.Node.js基础 1.1.Node是什么 1.2.Node环境安装失败解决方法 1.2.1.Node环境搭建 1.2.2.错误代码2 ...

  4. node.js事件驱动_了解Node.js事件驱动架构

    node.js事件驱动 by Samer Buna 通过Samer Buna 了解Node.js事件驱动架构 (Understanding Node.js Event-Driven Architect ...

  5. linux安装Node.js(详细)Node.js安装教程

    linux安装Node.js(详细)Node.js安装教程 文章目录 linux安装Node.js(详细)Node.js安装教程 1:下载 2:解压 3:移动目录 1:创建目录 2:移动目录并重命名 ...

  6. 【深入浅出Node.js系列十一】Node.js开发框架Express4.x

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 深入浅出Node.js系列 [深入浅出Node.js系列一]什么是Node.js [深入浅出Node.js系列二]N ...

  7. node.js入门系列(一)--Node.js简介

    什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一 ...

  8. Node.js 是什么?Node.js与JavaScript的区别是什么?

    node.js是什么?Node.js是一个Javascript运行环境(runtime).Node.js与JavaScript的区别是什么?本质:     Javascript是一种web前端语言,主 ...

  9. Node.js简介——为什么要学习node.js

    目录 什么是node.js 为什么要学习node.js node.js特点 什么是node.js Node.js简称Node,是一个可以使JavaScript运行在服务器端的开发平台. (1)Node ...

  10. Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持

    转自:https://itbilu.com/nodejs/core/VkcdcFq9.html OSI七层模型是不同计算机或通信系统间互联的标准体系和框架,在OSI中包括一系列标准和协议,如:TCP/ ...

最新文章

  1. 亚太信息安全领袖成就表彰计划:阿里成中国互联网公司唯一代表
  2. 【算法专题】积性函数
  3. 青少年学python第六节_青少年学Python(第2册)
  4. Windows 安装redis
  5. poj2479与poj2593 , 同一道DP题
  6. Golang 入门 : 数组
  7. [转]ROS2 源码解析与实践 - Node
  8. 进程线程协程-基本概念及特点
  9. 孪生神经网络_驾驶习惯也能识人?基于时空孪生神经网络的轨迹识别
  10. c++ __declspec
  11. 专为Mac用户设计的创建图形模式软件:Patternodes 2.4.4
  12. Windows下杀进程的命令
  13. 程序阻碍OD调试的方式2
  14. visio2007序列号
  15. stm8L 触摸库使用教程 一步一步
  16. 闪寸 U盘 检测工具 量产工具
  17. 做微商不推广,也能赚钱?
  18. 虚拟手机一款安卓模拟器,让你手机里拥有另外一台手机
  19. @SpringBootTest注解分析(一)Found multiple @SpringBootConfiguration annotated classes
  20. 树莓派学习笔记(九)树莓派Linux内核开发

热门文章

  1. 轻量级Java持久化框架,Hibernate完美助手,Minidao 1.6.2版本发布
  2. Java并发编程(06):Lock机制下API用法详解
  3. 制作Ubuntu16.04系统盘
  4. 财经数据提取器上线拉
  5. Django中的Form ModelForm
  6. Django restframwork实现自定义数据格式的分页与搜索
  7. Python 加密解密
  8. 创建定制的ASP.NET AJAX非可视化客户端组件
  9. svn中status为missing的文件的处理方式
  10. Linux学习之CentOS(五)----网卡的配置