Typescript 按顺序使用存储库的自定义函数

Typescript 按顺序使用存储库的自定义函数,typescript,repository,loopbackjs,Typescript,Repository,Loopbackjs,我创建了一个自定义函数,需要在服务器的每个路由中执行 此函数需要在请求头中检索一个参数,并在数据库中检查该参数。(由存储库控制) 如何在我的职能范围内访问此存储库 我尝试了不同的可能性,但我无法实现结果: 在函数内创建存储库(数据库似乎为空:() 尝试从控制器传递存储库(可以,但在序列文件中,我无法访问控制器或存储库:( 尝试在函数中包含控制器,但类似于2 我是环回和typescript的初学者,如您所见=)我想您正在寻找最近引入的拦截器,请参阅和 因为您希望为每个传入请求调用函数,所以可以使用

我创建了一个自定义函数,需要在服务器的每个路由中执行

此函数需要在请求头中检索一个参数,并在数据库中检查该参数。(由存储库控制)

如何在我的职能范围内访问此存储库

我尝试了不同的可能性,但我无法实现结果:

  • 在函数内创建存储库(数据库似乎为空:()
  • 尝试从控制器传递存储库(可以,但在序列文件中,我无法访问控制器或存储库:(
  • 尝试在函数中包含控制器,但类似于2

  • 我是环回和typescript的初学者,如您所见=)

    我想您正在寻找最近引入的拦截器,请参阅和

    因为您希望为每个传入请求调用函数,所以可以使用全局拦截器

    如何在我的职能范围内访问此存储库

    编写一个拦截器提供程序,它允许您利用基于
    @inject
    的依赖项注入来接收存储库。例如:

    类MyRequestValidator实现提供程序{
    建造师(
    @存储库(TokenRepository)受保护的tokenRepo:TokenRepository,
    @inject(RestBindings.Http.REQUEST)受保护的请求:请求,
    ) {}
    值(){
    返回this.intercept.bind(this);
    }
    异步截获(
    invocationCtx:InvocationContext,
    下一步:()=>value或promise,
    ) {
    //分析此.request.headers[名称]中的参数
    const token=this.request.headers['x-my-token'];
    //调用this.tokenRepo方法查询数据库
    const found=wait this.tokenRepo.findOne({where:{id:token}});
    const isValid=!found.expired;
    如果(!isValid){
    //抛出new Error()以终止错误
    抛出新的HttpErrors.BadRequest(“无效令牌”);
    }
    //调用next()继续处理请求
    返回next();
    }
    }
    
    我想您正在寻找最近推出的拦截器,请参阅和

    因为您希望为每个传入请求调用函数,所以可以使用全局拦截器

    如何在我的职能范围内访问此存储库

    编写一个拦截器提供程序,它允许您利用基于
    @inject
    的依赖项注入来接收存储库。例如:

    类MyRequestValidator实现提供程序{
    建造师(
    @存储库(TokenRepository)受保护的tokenRepo:TokenRepository,
    @inject(RestBindings.Http.REQUEST)受保护的请求:请求,
    ) {}
    值(){
    返回this.intercept.bind(this);
    }
    异步截获(
    invocationCtx:InvocationContext,
    下一步:()=>value或promise,
    ) {
    //分析此.request.headers[名称]中的参数
    const token=this.request.headers['x-my-token'];
    //调用this.tokenRepo方法查询数据库
    const found=wait this.tokenRepo.findOne({where:{id:token}});
    const isValid=!found.expired;
    如果(!isValid){
    //抛出new Error()以终止错误
    抛出新的HttpErrors.BadRequest(“无效令牌”);
    }
    //调用next()继续处理请求
    返回next();
    }
    }
    
    您尝试过中间产品吗?不确定它们在lb4中是如何提供的,但您是否尝试过Middleware?但不确定它们在lb4中如何可用