具有完整路径的节点异步 mkdir
Posted
技术标签:
【中文标题】具有完整路径的节点异步 mkdir【英文标题】:Node Asynchronous mkdir with full path 【发布时间】:2018-05-13 17:58:05 【问题描述】:我目前在我的 node.js 代码中使用 shell.js 的 mkdir -p,它是同步的。 '-p' 在 shell.mkdir 中用于创建具有完整路径的目录,这是 fs.mkdir
无法做到的。
if(fs.existsSync(archivePath + "\\" + site + "\\" + year)) // check if site folder exists
console.log(archivePath + "\\" + site + "\\" + year + " exists");
else
console.log(archivePath + "\\" + site + "\\" + year + " does not exist... creating full path now");
shell.mkdir('-p' , archivePath + "\\" + site + "\\" + year + "\\" + missionID);
如果有人知道如何获得 fs.mkdir
的异步性质和 shell.mkdir('-p', absolutePath)
的递归性质,请一举告诉我。
【问题讨论】:
我不确定您要做什么 1) 将shell.mkdir
替换为 fs.mkdir
+ wrapper 2) 使 shell.mkdir
async 3) 别的什么?
以上任何一个选项都足够了,只要我能够降低核心功能。
【参考方案1】:
您可以尝试使用节点模块commandir:
这些函数是幂等的,因此在尝试创建已存在的目录或尝试删除不存在的目录时不会出错。mkdir 和 rmdir 可以正常工作
mkdir
创建中间目录,因此您不必这样做!
mkdir
和 rmdir
将始终准确地告诉您创建或删除了哪些目录,以便您的程序可以在稍后执行中止时自行清理。这两个函数共享一致的 API 让您可以将一个函数的输出作为输入传递给另一个函数,这使得这一点变得特别容易!
安装
npmnpm install --save commandir
纱线
yarn add commandir
有关完整使用说明,请参阅documentation。
免责声明:我是 commandir 的作者
【讨论】:
感谢您的回复,但是当我在我的代码中尝试它时,我一直收到错误:C:\Foldername\node_modules\commandir\src\mkdir\index.js:8 async function mkdir (. ..args) 在“函数”下带有 ^^^^^^^^。我相信这是您遇到的问题,因为在运行您的示例代码后我也遇到了错误 @HarounAnsari 感谢您的反馈!发生错误是因为 Commandir 使用了旧版本节点不支持的异步函数。我很高兴您能够使用 mkdirp 解决您的问题。如果你发现你更喜欢mkdir
,它返回一个承诺而不是需要回调,并且能够升级到最新版本的节点,我鼓励你再试一次 Commandir。祝你好运!
感谢您的帮助,祝您的项目好运。【参考方案2】:
所以我发现我可以使用 mkdirp 通过 promise 来创建具有完整路径的目录。See full documentation here
【讨论】:
以上是关于具有完整路径的节点异步 mkdir的主要内容,如果未能解决你的问题,请参考以下文章
node的api使用——URL——get方法——网页爬虫——node事件——path路径——判断文件类型——fs四种异步封装——客户端文件验证发送