Как сохранить API-интерфейс живым, даже если источник данных недоступен в loopback 3? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть сомнения по поводу источников данных: Контекст: в настоящее время я работаю над проектом, в котором мой API использует два источника данных: A и B .

Иногда источник данных B имеет проблемы и недоступен, в то время как A всегда доступен.Когда B недоступен, рушится весь веб-сервис.

Мой вопрос: есть ли способ запрограммировать API для работы с той частью, которая развивает только источник данных A когда источник данных B недоступен?

Примечание: я работаю с Loopback 3

1 Ответ

0 голосов
/ 06 февраля 2019

lazyConnect:true Будет откладывать соединение до тех пор, пока вы не запросите подключенную к нему модель и не отправите клиенту сообщение об ошибке без сбоя сервера в случае сбоя соединения.

  "myDatasource": {
    "name": "myDatasource",
    "host": "ds.com",
    "database": "db",
    "username": "root",
    "password": "",
    "connector": "postgres",
    "lazyConnect": true
  },

Мой вопрос: есть ли способ запрограммировать API для работы с той частью, которая развивает источник данных A, только когда источник данных B недоступен?

Вы можете использовать события вашего источника данных, чтобы знать, когда менять модели.Вот что я кратко проверил.

server/boot/swap.js

function swapModelDatasource(app, model, ds) {
    const name = model.name;
    app.deleteModelByName(name);
    const m = app.model(ds.createModel(name, model.definition.properties, {
        settings: model.settings,
        relations: model.settings.relations,
        acls: model.settings.acls
    }));
}

module.exports = app => {
    const ds1 = app.datasources.aws;
    const m = app.models.Node;
    ds1.on('connected', () => swapModelDatasource(app, m, ds1));
}
...