6

簡単な API を作成するために使用したい JSON ファイルのフォルダーがあります。

これが私のフォルダ構造の簡略化されたバージョンです:

/clients.json

/clients/1/client.json

/clients/2/client.json

...

私の/clients.jsonファイルは次のようになります。

[
    {
        "id": 1,
        "name": "Jon Parker"
    },
    {
        "id": 2,
        "name": "Gareth Edwards"
    },
    ...
]

私の/clients/1/client.jsonファイルは次のようになります。

[
    {
        "date": "2014-09-12",
        "score": 40,
        ...
    },
    {
        "date": "2015-02-27",
        "score": 75,
        ...
    },  
    {
        "date": "2015-05-10",
        "score": 75,
        ...
    },
    {
        "date": "2016-08-27",
        "score": 60,
        ...
    }
]

からの ID はclients.json、関連する詳細が含まれるフォルダーに関連しています。

クライアント フォルダーに多数の JSON ファイルがあり、クライアント側でこれらすべてを個別に読み込むのではなく、Node.js を使用して API を作成し、柔軟性を高めたいと考えました。

クライアント名とIDのリストを返す /clients

クライアントの詳細を返す /clients/:id/details

最も重要なことは、名前と関連する詳細を含むすべてのクライアントを返すことです /clients/all/details

私はjson-serverで遊び始めましたが、JSON は配列ではなくオブジェクトである必要があり、残念ながらこの JSON の形式に固執しています。

どんな助けにも感謝します!

4

5 に答える 5

4

組み込みのファイル システム モジュールを使用して、ファイル システムからファイルを取得します。

ここを参照

これが例です。

var fs = require('fs');

exports.getClientDetail = function (id) {
  var result;
  fs.readFile('/clients/' + id + '/client.json', function (err, data) {
    if (err) throw err;

    result.push(JSON.parse(data));
  });
}
exports.getAllClientsDetail = function () {      
  // if the id is sequential, you can check if '/clients/' + id + '/client.json' exists for every i from 1 and up.  If it does - push it to an array of objects. if for a certain i it does not exist, quit the scan and return the array of objects.
}
于 2016-12-31T19:20:12.213 に答える
2

あなたは思っているほど行き詰まっていません。

配列をオブジェクトでラップする必要があります。次に、フロント エンドで配列プロパティにアクセスするだけです。

結局のところ、JSON はJava s cript Object Notation頭字語です。

編集:さて、何か新しいことを試してみましょう...

おそらく、json-server のコードを使用する前に、少し前処理を行ってください。その変数clientJsonが既に読んだファイルであると仮定すると、json-server からのコードを使用する前にこのコードを挿入します。

clientJson = "{root:"+clientJson+"}";

これにより、最初のプロパティが であるオブジェクトでファイルがラップされrootます。

その後、配列を元に戻すのは非常に簡単です。

clientData = clientData.root;
于 2016-12-09T00:43:45.677 に答える
1

FS モジュールからの読み取りストリームを使用してクライアントにデータを送信し、発生する可能性のあるエラーをキャッチし、送信後にメモリをクリーニングする必要があります。

于 2017-01-03T20:03:23.357 に答える