Loopback.js Как использовать разъем-отдых? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать пример приложения с разъемом-отдыхом.

https://github.com/strongloop/loopback-connector-rest

Моя цель - создать следующий API.

$ curl http://localhost:3001/addresses/17F54d4S9aLpvUEsk7MkYWafmzxJhhb9wW/balance
{
  "balance": 42030
}

баланс получен из blockchain.info api.

$ curl https://blockchain.info/balance?active=17F54d4S9aLpvUEsk7MkYWafmzxJhhb9wW
{"17F54d4S9aLpvUEsk7MkYWafmzxJhhb9wW": {
    "final_balance": 42030,
    "n_tx": 2,
    "total_received": 42030
}}

Вот что я сделал.

  1. Создание приложения Loopback
  2. Создание источника данных Rest
  3. Создать модель адреса

Но я не знаю, что мне делать дальше?Я думаю, что мне нужно что-то настроить для запроса.Должен ли я добавить его в datasources.json?Как это вызвать из address.js?

Мой код сохранен на github.https://github.com/y-zono/loopback-connector-rest-example


Обновление 1

Я нашел этот пример.

https://github.com/strongloop-community/loopback-example-connector/tree/rest

Затем я могу получить данные из blockchain.info.

https://github.com/y-zono/loopback-connector-rest-example/commit/f5e8f96a666f4fdab5d554e657f630635237c2c1

Все еще не уверен, нормально ли это или нет.Я проверяю это.

1 Ответ

0 голосов
/ 11 октября 2018

Я нашел его и подтвердил, что Promise и async / await хорошо работают.

Любые предложения приветствуются и приветствуются, если у вас есть другие лучшие способы.

* address.js

'use strict';

module.exports = function (Address) {

    async function getBalanceFromBlockchainInfo(address) {
        const blockchaininfo = Address.app.dataSources.blockchaininfo;
        try {
            const data = await Promise.all([
                blockchaininfo.balance(address),
                blockchaininfo.balance(address)
            ])
            return { "balance": data[0][address]["final_balance"], "unconfirmed_balance": data[0][address]["final_balance"] };
        } catch (err) {
            return err;
        }
    }

    Address.getBalance = function (address, callback) {
        getBalanceFromBlockchainInfo(address).then(data => callback(null, data)).catch(err => callback(err));
    };

    Address.remoteMethod("getBalance", {
        http: { verb: "get", path: "/:address/balances" },
        accepts: [
            { arg: "address", type: "string", required: true }
        ],
        returns: { type: "object", root: true }
    });
};

* datasources.json

{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "blockchaininfo": {
    "name": "blockchaininfo",
    "connector": "rest",
    "operations": [
      {
        "template": {
          "method": "GET",
          "url": "https://blockchain.info/balance",
          "query": {
            "active": "{address}"
          }
        },
        "functions": {
          "balance": [
            "address"
          ]
        }
      }
    ]
  }
}

https://github.com/y-zono/loopback-connector-rest-example

...