NestJS GET route возвращает данные, завернутые в поле данных

#typescript #rest #nestjs #crud

Вопрос:

Если у вас есть следующий маршрут, который должен возвращать имя пользователя и город пользователя.

Контроллер:

   @HttpCode(200)
  @Get(':userId')
  async getUserUnauthenticated(@Param("userId") userId: string): Promise<GetUserDto> {
    return this.usersService.getUsers(userId, false)
  }
 

Обслуживание:

 async getUsers(userId: string, authenticated: boolean): Promise<GetUserDto> {
    const user = await this.fusionAuthService.searchUserById(userId);
    const impacter = await this.impactersService.retrieveImpacterFromDatabaseById(userId)
    if (authenticated) {
      return {
        username: user.username,
        city: impacter.address.city,
        image: user.imageUrl
      }
    } else {
      return {
        username: user.username,
        city: impacter.address.city
      }
    }
  }
 

DTO:

 export class GetUserDto {
    username: string;
    city: string;
    image?: string;
}
 

Но вместо того, чтобы

 {
    "username": "ExampleName",
    "city": "ExampleTown"
}
 

он возвращается

 {
  "data": {
    "username": "ExampleName",
    "city": "ExampleTown"
  }
}
 

Что я делаю не так?

Ответ №1:

Похоже, у вас есть какой-то перехватчик, который преобразует ваши выходные данные, посмотрите здесь, как это работает, https://docs.nestjs.com/interceptors может быть, вы сможете разобраться в своем проекте, как это происходит.

С уважением.

Комментарии:

1. спасибо тебе! в main.ts был установлен глобальный перехватчик. app.useGlobalInterceptors(новый ResponseDataFormatterInterceptor()); Этот перехватчик добавил оболочку данных {}.

2. Круто, я рад, что смог тебе помочь!