最近,我改用nestJS进行装饰。但是我发现Middleware
和@UseGuards
有两件事。仅使用expressjs时,我与中间件一起工作。
现在,我担心的是这两者之间的实际区别是什么。在我看来,它们看起来一样。
答案 0 :(得分:2)
Pipes
,Filters
,Guards
和Interceptors
都可以被视为“专业中间件”,因为它们每个人都有自己的目的,而“中间件”本身是一个非常宽泛的术语。
管道用于请求验证和有效负载转换。序列化数据到您期望的内容,而不仅仅是更多。
过滤器是您的错误处理中间件。您可以告诉使用特定错误处理程序的路由,以及如何管理每个路由的复杂性。
拦截器是您之前和之后的中间件,例如日志记录请求以及响应映射和缓存管理。在每个请求之前和之后运行此功能的功能非常强大且有用。
最后,您的问题涉及什么,警卫是您的身份验证中间件。它们告诉您的服务器谁是谁,谁不可以通过谁到达指定的路由。
一个简单的答案是,防护和中间件功能之间不一定存在区别,但是中间件是一个更广泛的话题,而NestJS中的防护是非常具体的事情。唯一的不同是调用每个类的时间(中间件->保护->拦截器(之前)->管道->控制器->服务->控制器->拦截器(之后)->过滤器(如果适用)->客户端)
注意:这是假设使用ExpressJS HttpAdapter而不是Fastify HttpAdapter。 Fatify中间件的工作方式略有不同,并且可能与嵌套中间件的结构不完全兼容。因此,最好使用上述类。