Как мне установить поле заголовка в ответе с помощью Nest JS? - PullRequest
3 голосов
/ 09 мая 2020

Я пытаюсь:

    @Post('login')
    async login(@Body() body: AuthDto, @Res() res: Response) {
        const loginResponse = await this.authService.login(body);
        console.log('loginResponse', loginResponse)
        res.headers.set('x-access-token', loginResponse.access_token)
        return loginResponse
    }

, но без кубиков. Я получаю сообщение об ошибке:

TypeError: Cannot read property 'set' of undefined

1 Ответ

2 голосов
/ 09 мая 2020

Не самый элегантный способ: return res.set({ 'x-access-token': loginResponse.access_token }).json(loginResponse);

Я бы разделил этот logi c на перехватчик, проверяя, действителен ли ответ для пути / входа, если да, верните правильный заголовок (используя какое-то значение из loginResponse)

import { Controller, Get, Response } from '@nestjs/common';
import { Response as Res } from 'express';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(@Response() res: Res): Res {
    return res.set({ 'x-access-token': 1 }).json({ hello: 'world' });
  }

  @Get()
  getHelloAlt(@Response() res) {
    return res.set({ 'x-access-token': 1 }).json({ hello: 'world' });
  }
}

Это моя рабочая версия, обратите внимание на Express Response, а не на Nest. js.

EDIT: Тип, импортированный из Nest.js / common - это функция-декоратор, вместо этого используйте тип без типа, или . Импортируйте ответ от Express. js.

...