#loopback4
#loopback4
Вопрос:
Я пытаюсь выполнить запрос к базе данных, используя приведенный ниже код в цикле 4, но он выдает ошибку:
Свойство ‘execute’ не существует для типа ‘typeof MetadataLettersRepository’. Пожалуйста, помогите.
Соответствующие коды прилагаются здесь.
Определение репозитория:
import {DefaultCrudRepository} from '@loopback/repository';
import {MetadataLetters, MetadataLettersRelations} from '../models';
import {RossmasDataSource} from '../datasources';
import {inject} from '@loopback/core';
export class MetadataLettersRepository extends DefaultCrudRepository<
MetadataLetters,
typeof MetadataLetters.prototype.id,
MetadataLettersRelations
> {
constructor(
@inject('datasources.rossmas') dataSource: RossmasDataSource,
) {
super(MetadataLetters, dataSource);
}
}
Код контроллера:
import {get} from '@loopback/rest';
import {MetadataLettersRepository} from '../repositories';
export class HelloController {
@get('/searchByMetadata')
async searchByMetadata(): Promise<any> {
const result = await MetadataLettersRepository.execute(
'SELECT * FROM metadata_letters'
);
console.log('Query run successfully...!!!')
return (result)
}
}
Ответ №1:
Вы пытаетесь напрямую использовать класс, что невозможно в JavaScript или TypeScript. Вам понадобится экземпляр класса (объект), который уже был инициализирован LoopBack 4.
В контроллере должен быть конструктор для внедрения зависимостей:
// This may be different depending on how the controller was created.
// But the structure is more-or-less the same.
constructor(
@repository(MetadataLettersRepository)
protected repository: MetadataLettersRepository,
) {}
Это указывает LoopBack 4 предоставить экземпляр MetadataLettersRepository
в repository
переменную.
Оттуда repository.execute()
можно использовать:
// Notice the use of the `repository` variable.
const result = await repository.execute(
'SELECT * FROM metadata_letters'
);