Я вижу, что этот вопрос довольно старый, но он указан в Google в числе первых, поэтому я хочу добавить ответ здесь.
Если вы не хотите добавлять body-parser
промежуточное ПО (например,, вы хотите простой текст только в методе с одним контроллером), вы можете использовать raw-body
(который уже существует в ваших node_modules), что-то вроде этого:
import * as rawbody from 'raw-body';
import { Controller, Post, Body, Req } from '@nestjs/common';
@Controller('/')
export class IndexController {
@Post()
async index(@Body() data, @Req() req) {
// we have to check req.readable because of raw-body issue #57
// https://github.com/stream-utils/raw-body/issues/57
if (req.readable) {
// body is ignored by NestJS -> get raw body from request
const raw = await rawbody(req);
const text = raw.toString().trim();
console.log('body:', text);
} else {
// body is parsed by NestJS
console.log('data:', data);
}
// ...
}
}
вы также можете создать новый декоратор параметров
import * as rawbody from 'raw-body';
import { createParamDecorator, HttpException, HttpStatus } from '@nestjs/common';
export const PlainBody = createParamDecorator(async (data, req) => {
if (req.readable) {
return (await rawbody(req)).toString().trim();
}
throw new HttpException('Body aint text/plain', HttpStatus.INTERNAL_SERVER_ERROR);
});
и используйте его как
@Post()
async index(@PlainBody() text: string) {
// ...
(я не проверял код декоратора, написал прямо здесь, в комментарии)