这就是我如何定义我的存储库的,下面是环回文档中给出的非常通用的示例:-
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
非常感谢您的帮助。
不知怎么的,我通过注入像这样的数据源使它工作起来
export class SomeController {
constructor(
@repository(SomeRepository) public someRepository: SomeRepository,
@inject('datasources.timeseries') public dataSource: timeseriesDataSource,
) {}
someMethod(){
this.dataSource.connector.execute(sql, params, cb)
}
如果我找到更好的方法,我会编辑。请随时更正这个答案。
LoopBack 4还不支持execute
操作。我们最近在第2053期中讨论了这一限制。关于如何绕过当前限制的一些想法,请参阅我的评论。我打开了一个pull请求,向loopback-datasource-juggler添加一个基于承诺的dataSource.execute
API,请参阅https://github.com/strongloop/loopback-datasource-juggler/pull/1671.一旦该更改落地并发布,实现DefaultCrudRepository.prototype.execute()
将是微不足道的。
我们欢迎社区的贡献,如果你能为execute
的实现做出贡献,那就太好了。请参阅我们的贡献指南开始。
截至目前,在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();