Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nestjs保存每个请求信息,无需两次访问数据库_Node.js_Mongodb_Request_Nestjs - Fatal编程技术网

Node.js nestjs保存每个请求信息,无需两次访问数据库

Node.js nestjs保存每个请求信息,无需两次访问数据库,node.js,mongodb,request,nestjs,Node.js,Mongodb,Request,Nestjs,我希望保存每个到达服务器的请求(路径、方法和用户ID),而不必两次访问数据库,也不必将服务文件中的主要逻辑与事务弄乱 最初,我试图使用一个拦截器,因为它在auth保护“将用户附加到请求”之后和请求处理程序之前被调用,但我面临两个问题。 首先,拦截器将调用数据库来保存一条新记录,然后将请求转发给处理程序,处理程序将再次命中数据库来处理请求。其次,由于依赖性注射问题,它无论如何都不起作用 正如我提到的,由于依赖错误,下面的代码无法工作,但它会让您了解我需要实现什么 import{Injectabl

我希望保存每个到达服务器的请求(路径、方法和用户ID),而不必两次访问数据库,也不必将服务文件中的主要逻辑与事务弄乱

最初,我试图使用一个拦截器,因为它在auth保护“将用户附加到请求”之后和请求处理程序之前被调用,但我面临两个问题。 首先,拦截器将调用数据库来保存一条新记录,然后将请求转发给处理程序,处理程序将再次命中数据库来处理请求。其次,由于依赖性注射问题,它无论如何都不起作用

正如我提到的,由于依赖错误,下面的代码无法工作,但它会让您了解我需要实现什么

import{Injectable,
内斯特拦截器,
注射
执行上下文,
CallHandler,
HttpException,
HttpStatus}来自“@nestjs/common”;
从“rxjs”导入{Observable};
从'@nestjs/typeorm'导入{getRepositoryToken};
从“typeorm”导入{Repository};
从“../../modules/history/history.entity”导入{HistoryEntity};
@可注射()
导出类HistoryInterceptor实现NestInterceptor{
建造师(
@注入(getRepositoryToken(HistoryEntity))
私有只读历史repo:存储库
) {}
拦截(上下文:ExecutionContext,下一步:CallHandler):可观察{
const request=context.switchToHttp().getRequest();
const{user,path,method}=request
如果(!用户){
抛出新的HttpException(“发生了可怕的事情!”,HttpStatus.BAD\u网关);
}
const history=this.historyRepo.create({
路径
userId:user.id,
});
此.historyRepo.save(历史);
返回next.handle();
}
}