LoginSignup
2
1

More than 5 years have passed since last update.

ブロックチェーン・ベースのオブジェクトストレージのオブジェクト一覧の表示方法を改善してみた

Last updated at Posted at 2017-11-15

はじめに

ブロックチェーン・ベースのオブジェクトストレージを作ってみましたが、オブジェクトやコンテナ一覧を取得すると余計な文字列が付いていました。

testuserというアカウントのcontainer0というコンテナの下にobj0obj1というオブジェクトを作成し、その一覧を取得するコマンドを投げる場合、本来であればオブジェクト名の一覧だけ返ってきて欲しいところですが、現状では下の例のように余計な文字列もくっついて返ってきます。

$ curl -X GET http://localhost:3000/testuser/container0
Resource {id=org.acme.objectstore.Object#testuser/container0/obj0},Resource {id=org.acme.objectstore.Object#testuser/container0/obj1}

これは、Hyperledger Composerのクエリが返すオブジェクトを文字列に変換して表示しているためです。今回、オブジェクトやコンテナ一覧の表示方法を改良してみました。

改善方法

下のコードのように、query()メソッドの戻り値results[]をループで回してオブジェクト名を取得して返すようにしました。

router.get('/:accountid/:containerid', function(req, res, next){
  console.log("listing objects for " + req.params.accountid + " in " + req.params.containerid);
  var selectStatement = businessNetworkConnection.buildQuery('SELECT org.acme.objectstore.Object WHERE (container == _$class)');
  var accountContainerId = req.params.accountid + "/" + req.params.containerid;
  businessNetworkConnection.query(selectStatement, { "class": "resource:org.acme.objectstore.Container#" + accountContainerId })
  .then(function(results) {
    let objects = "";
    for(let i=0; i<results.length; i++){
      objects += results[i].objectId;
      objects += ",";
    }
    res.send(objects);
  }).catch(function (error){
    res.send(error);
  });
});

上記のコードはオブジェクト一覧を返すメソッドですが、コンテナ一覧を返すメソッドにも同様の変更を加えています。では、早速コードをテストしてみましょう。

$ curl -X GET http://localhost:3000/testuser/container0
obj0,obj1,

余計な文字列を排除し、以前よりも見栄えを良くすることができました!コードはこちらに置いています。

おわりに

将来的にはJSONやXMLの形式でオブジェクト一覧を表示したいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1