相关疑难解决方法(0)

NestJS 拦截器:无法在传出请求上设置 HTTP 标头

我正在 NestJS 中编写 API,其中有一组通用标头。我决定使用拦截器将标头附加到传出请求中。标头不会附加到请求中,因此请求不断失败。

拦截器

import * as utils from '../utils/utils';
import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor
} from '@nestjs/common';
import { HEADERS } from '../middlewares/headers.constant';
import { Observable } from 'rxjs';
import { Request } from 'express';
import { DATA_PARTITION_ID } from '../app.constants';

@Injectable()
export class HeadersInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<void> {
    const ctx = context.switchToHttp();
    const request: Request = ctx.getRequest();

    this.setHeaders(request);

    return next.handle();
  }

  private setHeaders(request): void {
    this.updateHeaders(request, HEADERS.ACCEPT, 'application/json');
    this.updateHeaders(request, HEADERS.CONTENT_TYPE, 'application/json'); …
Run Code Online (Sandbox Code Playgroud)

interceptor node.js express typescript nestjs

6
推荐指数
1
解决办法
2万
查看次数

Fastify 和 NestJS - 如何在拦截器中设置响应标头

我正在尝试在拦截器中设置响应标头,但我发现的任何方法都没有运气。我试过了:

 const request = context.switchToHttp().getRequest();
 const response = context.switchToHttp().getResponse();
 <snippet of code from below>
 return next.handle();
Run Code Online (Sandbox Code Playgroud)
  • request.res.headers['my-header'] = 'xyz'
  • response.header('my-header', 'xyz')
  • response.headers['my-header'] = 'xyz'
  • response.header['my-header'] = 'xyz'

没有运气。第一个选项表示 res 未定义,第二个选项表示“无法读取未定义的属性‘Symbol(fastify.reply.headers)’”,其他选项则不执行任何操作。

header nestjs fastify

4
推荐指数
1
解决办法
5835
查看次数

如何在 NestJS 中记录所有 Axios 外部 http 请求

我希望能够使用完整的 url、标题等记录每个 axios 请求,但目前没有找到这样做的方法。

到目前为止,我所做的就是根据这个答案写出一个 Http Interceptor

export class HttpLoggerInterceptor implements NestInterceptor {
  intercept(
    context: ExecutionContext,
    call$: Observable<any>,
  ): Observable<any> {
    return call$.pipe(
      map(data => {
        // pipe call to add / modify header(s) after remote method
        const req = context.switchToHttp().getRequest();
        return data;
      }),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我在调试时浏览对象reqcontext道具,但看不到 Asios 请求 url 等。除非我错过了。

我的控制器路由(api/data在那种情况下)有 N 个 http 外部调用发生,但拦截器只拦截控制器控制器调用而不是 Axios 调用。

有什么想法吗?

那是context对象:

args:Array(2) [IncomingMessage, ServerResponse]
constructorRef:class AppController { … }
getRequest:() …
Run Code Online (Sandbox Code Playgroud)

javascript node.js typescript axios nestjs

3
推荐指数
1
解决办法
1万
查看次数