контроллер не возвращает результат без replay.send с платформой fastify - PullRequest
0 голосов
/ 02 мая 2019

У меня есть маршрут входа, который возвращает пользователя:

@Post('login')
async login(@Body() user: LoginRequest, @Res() reply): Promise<User> {
    const foundUser = await this.authService.validateUser(user.email, user.password);
    reply.setCookie('t', foundUser._id, { path: '/' });
    // reply.send(foundUser);
    return foundUser;
}

Моя проблема в том, что он ничего не возвращает (застрял в ожидании ...)), если я не сделаю reply.send(foundUser);

Я использую прокси с разрешением источника Cors:

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());

  // enable cors for static angular site.
  const corsOptions = {
    origin: 'http://localhost:4200',
    optionsSuccessStatus: 200,
    credentials: true,
    methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
  };
  app.register(require('fastify-cors'), corsOptions);

  // enable cookie for auth.
  app.register(require('fastify-cookie'));

  // validate types and extra
  app.useGlobalPipes(new ValidationPipe({ forbidUnknownValues: true }));

  await app.listen(3000);
}

Ссылка на исходный код.

1 Ответ

2 голосов
/ 02 мая 2019

Вы должны удалить @Res() reply из функции вашего контроллера. Как только вы вводите объект response, многие функции гнезда перестают работать, например, Перехватчики.

@Post('login')
async login(@Body() user: LoginRequest): Promise<User> {
    return this.authService.validateUser(user.email, user.password);
}

Вы можете использовать перехватчик для динамической установки cookie.

...