1

这就是我按照环回文档中给出的非常通用的示例定义我的存储库的方式:-

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

非常感谢任何帮助。

4

3 回答 3

1

不知何故,我通过像这样注入数据源让它工作了

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

如果我找到更好的方法,我会编辑。请随时更正此答案。

于 2018-11-16T12:58:03.303 回答
1

LoopBack 4 尚不支持execute动作。我们最近在issue #2053中讨论了这个限制。有关如何解决当前限制的一些想法,请参阅我的评论。我打开了一个拉取请求以dataSource.execute向 loopback-datasource-juggler 添加一个基于 Promise 的 API,请参阅https://github.com/strongloop/loopback-datasource-juggler/pull/1671。一旦该更改落地并发布,实施DefaultCrudRepository.prototype.execute()将是微不足道的。

execute我们欢迎社区贡献,如果您可以自己为 loopback-next贡献实现,那就太好了。请参阅我们的投稿指南以开始使用。

于 2018-12-06T16:31:08.490 回答
0

截至目前,在 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();
于 2020-01-16T11:09:21.317 回答