Я думаю, что вы ищете недавно представленные перехватчики, см. Перехватчики и Генератор перехватчиков .
Поскольку вы хотите вызывать свою функцию для каждого входящего запроса,Вы можете использовать Глобальный перехватчик.
как я могу получить доступ к этому репозиторию в рамках моей функции?
Написать провайдера перехватчика, он позволяет вам использовать @inject
на основе зависимости-инъекция для получения хранилища.Например:
class MyRequestValidator implements Provider<Interceptor> {
constructor(
@repository(TokenRepository) protected tokenRepo: TokenRepository,
@inject(RestBindings.Http.REQUEST) protected request: Request,
) {}
value() {
return this.intercept.bind(this);
}
async intercept<T>(
invocationCtx: InvocationContext,
next: () => ValueOrPromise<T>,
) {
// parse the parameter from this.request.headers[name]
const token = this.request.headers['x-my-token'];
// call this.tokenRepo methods to query the database
const found = await this.tokenRepo.findOne({where:{id: token}});
const isValid = !found.expired;
if (!isValid) {
// throw new Error() to abort with error
throw new HttpErrors.BadRequest('Invalid token.'));
}
// call next() to continue with request handling
return next();
}
}