CommandHandler не найдено исключение с полезной нагрузкой команды - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь использовать команду DTO, но его обработчик не распознается.Когда я регистрирую DTO, это простой объект {...} без CreateUserCommand подписи.

Вот мой контроллер:

async index(@Body() createUserCommand: CreateUserCommand): Promise<User> {
    console.log(createUserCommand);
    return await this.commandBus.execute(createUserCommand);
  }

Я получаю следующий вывод:

 { 
    firstName: 'xxx',
    lastName: 'xxx',
    email: 'xxx@xxx.com',
    password: 'xxx'
}

Когда я пытаюсь напрямую использовать команду, она работает:

const command = new CreateUserCommand();
command.firstName = 'xxx';
command.lastName = 'xxx';
command.email = 'xxx@xxx.com';
command.password = 'xxx';

return await this.commandBus.execute(createUserCommand);

Следующий вывод:

 CreateUserCommand { 
    firstName: 'xxx',
    lastName: 'xxx',
    email: 'xxx@xxx.com',
    password: 'xxx'
}

Можно ли использовать DTO в качестве обработчика команды

1 Ответ

0 голосов
/ 07 апреля 2019

Если вы используете @Body, он создаст простой объект javascript, но не экземпляр вашего класса dto. Вы можете использовать class-transformer и его метод plainToClass(CreateUserCommand, createUserCommand) для фактического создания экземпляра вашего класса.

Если вы используете ValidationPipe, он может автоматически преобразовать ваш простой объект в класс, если вы передадите опцию transform: true:

@UsePipes(new ValidationPipe({ transform: true }))
async index(@Body() createUserCommand: CreateUserCommand): Promise<User> {
    console.log(createUserCommand);
    return await this.commandBus.execute(createUserCommand);
}
...