45

Node.jsの下で 1 つのJSON配列を永続的な方法で保存するための非常に簡単な方法を探しています。特別な機能を持つ必要はありません。そこにJSONオブジェクトを入れて、次のサーバーの再起動時にそれを読み取れるようにしたいだけです。

( MongoDBCouchDBなどのソリューションは、どちらもこの目的には過剰に思えます。)

4

9 に答える 9

82

ファイルに書き込んでみませんか?

// Writing...
var fs = require("fs");
var myJson = {
    key: "myvalue"
};

fs.writeFile( "filename.json", JSON.stringify( myJson ), "utf8", yourCallback );

// And then, to read it...
myJson = require("./filename.json");

また、読み書きを繰り返し行う必要がある場合は、繰り返し読み込んでいるファイルごとに Node のキャッシュをクリアする必要があります。そうしないと、Node はファイルをリロードせず、代わりに最初のrequire呼び出しで見たコンテンツを生成します。特定の要求のキャッシュをクリアするのは、ありがたいことに非常に簡単です。

delete require.cache[require.resolve('./filename.json')]

また、(ノード 12 の時点で) CommonJS ではなく ES モジュールを使用している場合、importステートメントには対応するキャッシュの無効化がないことに注意してください。代わりに動的 import()を使用すると、インポートは URL から行われるため、インポート文字列の一部としてキャッシュ無効化の形式としてクエリ文字列を追加できます。

または、組み込みのキャッシュを回避するには、require の代わりにfs.readFile()/を使用します ( promise ベースのコードを明示的または async/await を使用して暗黙的に記述している場合は代わりに使用します)。fs.readFileSync()fs/promisesfs

于 2013-02-18T15:11:10.257 に答える
9

NeDB を試す: https://github.com/louischatriot/nedb

「Javascript で書かれた Node.js 用の埋め込み永続データベースで、依存関係はありません (もちろん npm モジュールを除く)。単純な require ステートメントで使用できる Node.js プロジェクトの SQLite と考えることができます。API MongoDB のサブセットです。永続的またはメモリ内のみのデータストアとして使用できます。"

于 2015-01-16T22:54:45.227 に答える
5

ファイル内の JavaScript オブジェクトを JSON にシリアル化し、後で取得するための json-fs-storeという名前のライブラリを見つけました。

メソッドを介してファイルを取得する場合store.load(現時点ではドキュメントには記載されていません)、他の回答で like をJSON.parse実行するよりも優れた方法で解析されます。require

  • コンテンツの形式が正しくない場合、適切なエラー処理が得られます
  • 誰かが JavaScript コードをファイルに忍び込ませた場合、JS が実行される代わりに解析エラーが発生します。
于 2013-06-25T15:48:29.140 に答える
4

パフォーマンスをお探しの場合は、次を検討してください: LokiJS

https://www.npmjs.com/package/lokijs

http://lokijs.org/#/

于 2016-04-08T08:33:29.833 に答える
3

JSON データを単純なテキストファイルに保存し、サーバーの再起動時に読み取ることができます。

const data = require("yourarrayfile.json");

その後、通常どおり操作します。

于 2013-02-18T15:07:23.417 に答える