首先现在安装yflow
yflow 借助es6 生成器函数来解决金字塔回调问题。
这个连接
http://faylai.iteye.com/blog/1924523
是我先前使用async 做的但是代码超长不好理解,写做困难。
比较下面的实现简直就是nodejs的曙光啊
---------------------------------------------------------------------------
首先安装 yflow 组建 :npm install yflow
var yflow = require("yflow"); var FS = require("fs"); var fs = yflow.wrap(FS); var path = require("path"); // 检测文件或者文件夹是否存在 var isExists = yflow.wrap(function (dir, cb) { FS.exists(dir, function (isExist) { cb(null, isExist); }); }); // 创建多级目录 function mkdirs(p, mode, f, made) { if (typeof mode === 'function' || mode === undefined) { f = mode; mode = 0777 & (~process.umask()); } if (!made) { made = null; } var cb = f || function () {}; if (typeof mode === 'string') { mode = parseInt(mode, 8); } yflow( function * () { p = path.resolve(p); var startDir = p; while (true) { var exist = yield isExists(startDir); if (exist) { break; } else { startDir = path.dirname(startDir); } } var slashees = p.split(startDir)[1].split(path.sep); for (var i = 0; i < slashees.length; i++) { var slashee = slashees[i].trim(); if (slashee != '') { startDir = path.join(startDir, slashee); yield fs.mkdir(startDir, mode); } } })(f) } // 单个文件复制 function copyFile(file, toDir, cb) { yflow(function * () { yield yflow.wrap(mkdirs)(toDir); var reads = FS.createReadStream(file); var writes = FS.createWriteStream(path.join(path.resolve(toDir), path.basename(file))); reads.pipe(writes); reads.on("end", function () { writes.end(); }); })(cb); } //文件夹复制 function copyDir(from, to, cb) { yflow(function * () { var stat = yield isExists(from); stat = yield fs.stat(from); if (stat.isFile()) { yield yflow.wrap(copyFile)(from, to); } else if (stat.isDirectory) { var files = yield fs.readdir(from); for (var i = 0; i < files.length; i++) { var newFile = path.join(from, files[i]); stat = yield fs.stat(newFile); if (stat.isFile()) { yield yflow.wrap(copyFile)(newFile, to); } else if (stat.isDirectory()) { yield yflow.wrap(copyDir)(newFile, path.join(to, files[i])); } } } })(cb); }
测试代码如下:
copyDir("F:\\jar", "F:\\jar2", function (e) { if (e) { console.log(e.stack); } else { console.log("copy ok!"); } })
相关推荐
实现遍历文件夹功能的代码中,使用了`fs.readdirSync`方法,该方法同步读取目录内容,并返回一个文件名的数组。通过递归调用`readFile`函数,程序能够深入到每一个子目录中继续遍历,对于每一个文件,程序会使用`fs....
2. yield关键字:在生成器函数中使用yield关键字可以暂停函数的执行,并且可以配合Promise使用,等待异步操作完成后再恢复执行。 3. Promise:Promise对象代表一个最终可能完成也可能失败的异步操作,提供了一种...
nodeJS 抽离 遍历 文件夹下的所有压缩包。也可以抽离遍历指定类型的文件
在Node.js环境中,实现纯异步的文件夹(目录)复制功能是一项常见的任务,尤其在构建文件系统操作或数据迁移的场景中。本篇将详细讲解如何使用纯异步方式来复制一个目录及其内容。 首先,我们需要理解Node.js中处理...
在Node.js环境中,有时我们需要处理文件系统的操作,例如复制整个文件夹及其子文件夹中的所有内容。本篇文章主要探讨如何实现Node.js中的文件夹深层复制功能。在实际开发中,这种功能可以应用于备份、迁移或者处理多...
标题中的“一个文件夹解决nvm和node.js”指的是如何在一个文件夹中同时管理NVM(Node Version Manager)和Node.js的多个版本。NVM是一个非常实用的工具,尤其对于开发者来说,它允许你在同一台计算机上安装和切换...
这个例子展示了如何使用jQuery FileUpload和Node.js的formidable实现异步文件上传,并在客户端实时显示上传进度。通过这种方式,用户可以一边上传大文件,一边进行其他操作,提高了Web应用的交互性。记得在实际项目...
从文本中提取关键字 使用它: npm install auto-keywords var extract = require('auto-keywords'); var keywords = extract('your text here');
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具。 本资源代码配合博客使用:https://blog.csdn.net/qq_25479327/article/details/81148772 NodeJs使用mongoose操作mongodb
在本教程中,我们将探讨如何使用 Node.js 实现 OAuth2.0 的基本流程。 首先,我们需要了解 OAuth2.0 的四个主要角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和授权服务器...
v2.0基于thinkjs的图片异步上传demo,包括上传、展示、编辑、删除使用本产品需要以下知识//down.chinaz.com/soft/36581.htm添加会员功能,或者更改上传插件为批量上传安装:1 安装nodejs、thinkjs2 把解压后根目录的...
除了使用fs模块的方法外,还可以通过执行系统的cp命令来复制文件或文件夹。通过child_process模块中的spawn函数,可以创建一个新的进程来执行shell命令。这里以复制文件为例,使用cp命令实现: ```javascript const ...
2. **使用生成器重构**:创建一个新的生成器函数,使用`yield`表达式来表示异步操作。这些`yield`表达式通常会返回一个Promise,这样生成器就可以在Promise解决或拒绝时暂停和恢复。 3. **协调生成器**:为了驱动...
OAuth是一种开发授权的网络标准,全拼为open authorization,即开放式授权,最新的协议版本是2.0。 举个栗子: 有一个”云冲印”的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让”云...
我们在编写express后台,经常要有许多异步IO的处理。在远古时代,我们都是用chunk函数处理,也就是我们最熟悉的那种默认第一个参数是error的函数。我们来模拟一个Mongo数据库的操作,感受一下。 mongoDb.open...
在Node.js中,我们可以使用`fs`模块的`exists()`方法来检查文件或文件夹是否存在。这个方法接受一个文件或目录的路径作为参数,以及一个回调函数。当文件或目录存在时,回调函数会接收到`true`;反之,如果不存在,...
nodejs文件位于nodejs文件夹中,部署在云端;nodejsmysql文件是Android的部分源代码,apk可以安装在手机上。一个简单的应用程序,主要帮助了解如何使用云服务器以及如何连接到它们