目次

目次

Node.jsで再帰的にディレクトリを作る処理

鈴木
鈴木
最終更新日2018/08/09 投稿日2018/08/09

はじめに

アプリ内でディレクトリを作る、となった場合、存在有無は?階層構造は?存在してた場合は?というようなことを考えなくてはならないわけですが、 Node.jsではFileReadとFileReadSyncみたいに、Syncがついているものとついていないものがあります。 やることは同じなんですがどう違うかというと非同期か同期的に実行されるかで、Sync(同期的)は使わないほうがよいとされています。 FileIOとかは時間がかかるので同期的にやると処理が遅くなってしまうからです。つまりSyncを使うことはNodejserにとって敗北。 なので、ファイルの存在確認の説明書を見ると

fs.exists(path, callback)  [deprecate] fs.existsSync(path)

となっています。 つまりSyncは使えるけど非同期の存在確認は非推奨。 これは非同期処理に於いて、その時点のファイル存在確認ってどの時点の存在確認?という意味です。 つまり存在確認なんてするだけ無意味でそんなもん気にしないんだよ、っていうメッセージである。というおはなしでした。

概要

module.exports.makeDir = (path)-> new Promise (f, r)->
  path = path[0...-1] if path.match("/$")
  fs.mkdir path, (e)->
    if e?
      if e.code == 'ENOENT'
        helper.makeDir path.split("/")[0...-1].join("/")
        .then (v)->
          helper.makeDir path
            .then (v)->
              f()
            .catch (e)->
              r e
        .catch (e)->
          r e

      else
        r e
    else
      f()

として

helper.makeDir "po/bag/asdf/asdf/fe/fe/asdf/efe/sasdf/efda/sdfe/fa/"
.then (v)-> console.log v
.catch (e)-> console.log e

とかやるとできます。

おわりに

「PHPは なければその階層まで勝手に作る」と言われました。。。 http://php.net/manual/ja/function.mkdir.php

鈴木

和服とvapeとСистемаと醗酵とたまごふわふわとカッティングシェイプスとジャージークラブとjuke/fwkに傾倒する人です

目次