Как установить другой статус Http в loopback 4 - PullRequest
0 голосов
/ 12 февраля 2019

Я не могу найти никаких ресурсов о том, как изменить успешный HTTP-код с помощью обратной петли 4.

Например:

201 "создан" в методе публикации

204 «нет содержимого» в методе удаления

Я пытался указать это в @api decorator, но это изменение не отражено в реальном ответе.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 15 февраля 2019

Я не могу найти никаких источников о том, как изменить успешный HTTP-код с помощью обратной петли 4.

У нас пока нет первоклассной поддержки этой функции.Текущее решение состоит в том, чтобы внедрить объект Response в метод вашего контроллера и установить код состояния напрямую через основной API Express / Node.js.

export class TodoController {
  constructor(
    @repository(TodoRepository) protected todoRepo: TodoRepository,
    @inject(RestBindings.Http.RESPONSE) protected response: Response,
  ) {}

  async createTodo(@requestBody() todo: Todo): Promise<Todo> {
    this.response.status(401);
    // ...
  }
}

Не забудьте импортировать Response из @loopback/rest,Добавьте приведенный ниже импорт в свой контроллер.

import { Response } from '@loopback/rest';

201 «создано» для метода записи

См. Обсуждение в https://github.com/strongloop/loopback-next/issues/788. Сложная частькак выяснить, какой URL отправлять в заголовке ответа Location.

204 "нет содержимого" при методе удаления

Просто измените метод контроллера для возврата undefined вместо текущего {count: 1} объекта.Я полагаю, что это стандартное поведение для контроллеров CRUD, созданных с помощью нашего инструмента lb4.

export class TodoController {
  // ...
  @del('/todos/{id}', {
    responses: {
      '204': {
        description: 'Todo DELETE success',
      },
    },
  })
  async deleteTodo(@param.path.number('id') id: number): Promise<void> {
    await this.todoRepo.deleteById(id);
  }
...