如何在 loopback4 控制器上获取应用程序实例
How to get app instance on loopback4 controller
不清楚如何在 Loopback4 上的简单控制器上访问 request/response、上下文或应用程序实例。它是全球可用还是我将其注入控制器class,如果是如何,请帮助。
编辑:
我需要更改控制器操作的返回状态代码,所以我认为为此需要响应上下文,并认为我需要应用程序来获取此响应上下文。发现我可以通过 DI 访问 Context 对象;
export class TodoController {
constructor(
@repository(TodoRepository)
public todoRepository: TodoRepository,
@inject(RestBindings.Http.CONTEXT) public ctx: Context,
) {}
我仍然想知道从控制器、模型、存储库等访问整个应用程序可用的全局或单例对象的所有选项
对于管理响应代码,您不需要使用上下文对象。这是执行此操作的更好方法。
对于成功响应,只需通过控制器方法更改 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.
不清楚如何在 Loopback4 上的简单控制器上访问 request/response、上下文或应用程序实例。它是全球可用还是我将其注入控制器class,如果是如何,请帮助。
编辑: 我需要更改控制器操作的返回状态代码,所以我认为为此需要响应上下文,并认为我需要应用程序来获取此响应上下文。发现我可以通过 DI 访问 Context 对象;
export class TodoController {
constructor(
@repository(TodoRepository)
public todoRepository: TodoRepository,
@inject(RestBindings.Http.CONTEXT) public ctx: Context,
) {}
我仍然想知道从控制器、模型、存储库等访问整个应用程序可用的全局或单例对象的所有选项
对于管理响应代码,您不需要使用上下文对象。这是执行此操作的更好方法。
对于成功响应,只需通过控制器方法更改 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.