如何在Loopback4控制器上获取应用程序实例

时间:2019-03-30 11:25:22

标签: loopbackjs

目前尚不清楚如何在Loopback4的简单控制器上访问请求/响应,上下文或应用程序实例。它是全局可用的还是将其注入到控制器类中,如果可以的话,请提供帮助。

编辑: 我需要更改控制器动作的返回状态代码,因此我认为我需要为此使用Response Context,并认为我需要使用该应用来获取此响应上下文。发现我可以通过DI访问Context对象;

export class TodoController {
  constructor(
    @repository(TodoRepository)
    public todoRepository: TodoRepository,
    @inject(RestBindings.Http.CONTEXT) public ctx: Context,
  ) {}

我仍然想了解所有从控制器,模型,存储库等访问应用程序中可用的全局或单例对象的所有选项。

1 个答案:

答案 0 :(得分:1)

对于管理响应代码,您不需要使用上下文对象。这是一种更好的方法。

要获得成功响应,只需通过控制器方法更改API模式中的状态码即可。

@post(rolesPath, {
    responses: {
      200: {
        description: 'Role model instance',
        content: {
          'application/json': {schema: {'x-ts-type': Role}},
        },
      },
    },
  })
  async create(@requestBody() role: Role): Promise<Role> {
    return await this.roleRepository.create(role);
  }

对于错误响应,请使用http-errors模块中的HttpErrors接口,该模块将作为lb4依赖项的一部分自动安装。.

throw new HttpErrors.BadRequest("Some required data missing in request");

这将引发错误响应代码400。在此界面中,几乎将需要所有错误代码。您可以使用它们。

现在关于您另一个有关如何访问全局对象的问题。您可以使用在任务中显示的DI来完成此操作。但是在控制器或存储库中访问它不是一个好习惯。相反,如果您确实需要更改某些内容,则应在Sequence中进行。请参阅文档here