経験知ロゴ

NeDBでリネームエラーがポップアップで出る場合の対処法

nedbリネームエラーの対処法

NeDBで同じファイルに間隔を開けずに連続でアクセスすると、「Error:EPERM:operation not permitted, rename」というポップアップエラーが出て処理が止まってしまいます。

NeDBはデータベースに読み書きする際、整合性を保つためにファイルの末尾に「~」をつけたファイルを一旦作成するのですが、その作成中やリネーム後に次のアクセスがきてしまうと「~」ファイルを前の処理がリネームしてしまいファイル自体がなかったり、書き込み権限をロックしていたりしているのが原因だと思います。

このエラーは、DataStoreをnewする時に「autoload」を「true」にするとエラーがthrowされてしまうので、「onload」を追加し、load後のエラー処理を自分で書けばポップアップエラーが出なくなります。

const db = new DataStore({
  filename: 'path/to/file',
  autoload: true,
  onload: (error) => {
    if (error) {
      console.log(error);
    }
  },
});

役に立ったらこの記事のシェアをお願いします

ブログのフォロー・RSS購読は下記ボタンから