我正在开发一个Nest.js项目。
我有一个拦截器,可以简单地记录请求参数:
@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拦截器中访问请求的查询参数?
发布于 2021-11-21 14:37:30
试试request.query
@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()
}
}发布于 2021-11-21 14:49:56
示例日志截取程序
@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);
}));
}
}https://stackoverflow.com/questions/70055274
复制相似问题