Loopback 4, запросы с помощью SQLQuery с соединителем postgres

Вот как я определил свой репозиторий, следуя очень общему примеру, приведенному в документации по обратной связи: -

import {DefaultCrudRepository, juggler} from '@loopback/repository';
import {AModel} from '../models';
import {TimeseriesDataSource} from '../datasources';
import {inject} from '@loopback/core';

export class AModelRepository extends DefaultCrudRepository<
  AModel,
  typeof AModel.prototype.id
> {
  constructor(
    @inject('datasources.timeseries') dataSource: TimeseriesDataSource,
  ) {
    super(AModel, dataSource);
  }
}

Я надеялся, что если сделать AModelRepository.execute(sql, null, cb), это сработает. Но ошибка его выдачи - Error: Not implemented

Любая помощь высоко ценится.


person VISHAL DAGA    schedule 16.11.2018    source источник


Ответы (3)


Каким-то образом я заставил его работать, введя источник данных, подобный этому

    export class SomeController {
      constructor(
        @repository(SomeRepository) public someRepository: SomeRepository,
        @inject('datasources.timeseries') public dataSource: timeseriesDataSource,
      ) {}
      someMethod(){
         this.dataSource.connector.execute(sql, params, cb)
       }

Я отредактирую, если найду лучший подход. Пожалуйста, не стесняйтесь исправлять этот ответ.

person VISHAL DAGA    schedule 16.11.2018

LoopBack 4 пока не поддерживает execute действие. Мы недавно обсуждали это ограничение в проблеме № 2053. См. мой комментарий для некоторых идей о том, как обойти текущие ограничения. Я открыл пул-реквест, чтобы добавить dataSource.execute API на основе обещаний в loopback-datasource-juggler, см. https://github.com/strongloop/loopback-datasource-juggler/pull/1671. Как только это изменение будет внесено и выпущено, реализация DefaultCrudRepository.prototype.execute() станет тривиальной задачей.

Мы приветствуем вклад сообщества, было бы здорово, если бы вы сами внесли свой вклад в реализацию execute loopback-next. Чтобы начать работу, см. Наше Руководство по участию.

person Miroslav Bajtoš    schedule 06.12.2018

В Loopback 4 на данный момент ответ от @Miroslav выше работает.

Я использую это так:

export class SomeDataSource extends juggler.DataSource {
  constructor(
    @inject('DATA_CONFIG_SOURCE') private dsConfig: object
  ) {
    super(dsConfig);
  }
}
//in tests
const datasource = new SomeDataSource(postgresConfig);
dataSource.execute(sqlStatement);

//at the end of the tests
await dbDataSource.disconnect();
person Vitaliy    schedule 16.01.2020