Почему @Body () в запросе Post не работает должным образом? [Nest.js] - PullRequest
1 голос
/ 07 апреля 2020

Я начинаю изучать Nest. js, поэтому я следую учебному пособию Academind ( ссылка ).

Мой код работает неправильно, когда я пытаюсь получить переменная body с декоратором @Body() в запросе POST. Следуя этой части кода в products.controller.ts

@Post()
async addProduct(@Body() body: Product) {
  console.log(body);
  const generatedId = this.productService.insertProduct(body.title, body.description, 5.99);
  return generatedId;
}

В терминале вывод является просто пустым объектом: {}

Я искал другие примеры, чтобы посмотреть, как это сделать должным образом. Я нашел учебник в DigitalOcean , где они также используют @Body в запросе POST; они оставляют конец урока репо с примером . Этот пример не работает для меня.

Я только что сделал небольшое изменение в функции addBook() в файле book.service.ts для возврата новой книги вместо всех книг

addBook(book): Promise<any> {
    return new Promise(resolve => {
        this.books.push(book);
        // resolve(this.books);
        resolve(book);
    });
}

Я делаю следующий запрос POST от Почтальона, но ответом является пустой объект.

POST request from Postman

Все остальные HTTP-запросы работают просто замечательно, кроме POST-запроса .

Есть идеи, что может быть не так в коде? Заранее спасибо. ?

1 Ответ

3 голосов
/ 07 апреля 2020

Вы отправляете form-data, который Nest JS по умолчанию не анализирует правильно. Вы можете использовать application/x-www-url-form-encoded или application/json вместе с опцией raw в Почтальоне. Тело JSON будет выглядеть так:

{
  "id": "7",
  "title": "Whatever Title",
  "desscription": "whats doc",
  "author": "Me"
}

И тогда ваш сервер правильно распознает тело. Другой вариант - добавить анализатор тела, который правильно анализирует данные формы. Есть несколько вариантов, таких как multer, form-parser, formidable и другие.

...