首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在拦截器中获取请求查询参数

如何在拦截器中获取请求查询参数
EN

Stack Overflow用户
提问于 2021-11-21 14:09:03
回答 2查看 159关注 0票数 0

我正在开发一个Nest.js项目。

我有一个拦截器,可以简单地记录请求参数:

代码语言:javascript
复制
@Injectable()
export class MyRequestInterceptor implements NestInterceptor {
  constructor(private logger: MyLogger) {}

  intercept(context: ExecutionContext, next: CallHandler): Observable<string> {
    const http = context.switchToHttp();
    const request = http.getRequest();
    const params = request.params;

    // output is {}, no parameters showing
    this.logger.info(JSON.stringify(params)); 

    return next.handle()
  }
}

当我发送请求GET http://localhost:9001/data?foo=1,2时,我希望看到foo=1,2的日志,但我看到的是空对象{}。那么,我哪里错了?如何在Nest.js拦截器中访问请求的查询参数?

EN

回答 2

Stack Overflow用户

发布于 2021-11-21 14:37:30

试试request.query

代码语言:javascript
复制
@Injectable()
    export class MyRequestInterceptor implements NestInterceptor {
     
    
         constructor(private logger: MyLogger) {}
        
          intercept(context: ExecutionContext, next: CallHandler): Observable<string> {
            const http = context.switchToHttp();
            const request = http.getRequest();
            const query = request.query;
        
      
            this.logger.info(JSON.stringify(query)); 
        
            return next.handle()
          }
    
    }
票数 0
EN

Stack Overflow用户

发布于 2021-11-21 14:49:56

示例日志截取程序

代码语言:javascript
复制
@Injectable()
export class LogRequestInterceptor implements NestInterceptor {
  constructor(
  ) { }

  async intercept(context: ExecutionContext, next: CallHandler<any>): Promise<Observable<any>> {
    const http = context.switchToHttp();
    const request = http.getRequest();
    const id = v4();

    const { params, query, body, headers, user } = request;
    const { url, method } = request.raw;

    console.log('___________________________________________________________________________');
    console.log('url : ', url);
    console.log('method : ', method);
    console.log('params : ', params);
    console.log('query : ', query);
    console.log('body : ', body);
    console.log('headers : ', headers);
    console.log('id : ', id);

    // const message = { id, type: 'request', method, url, params, query, body, headers, user: (user || {}) };
    // this.logger.log(message);

    return next.handle()
      .pipe(tap(data => {
      }),
        catchError(err => {
          const { message: error, status, stack } = err;
          const errorMessage = {
            id, type: 'error', method, url, params, query, body, headers,
            user: (user || {})._id, data: { error, status, stack },
          };
          console.log('err', err);
          return throwError(err);
        }));
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70055274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档