在Nestjs中,我们还有4个其他功能。
可以建造嵌套结构:
这些不同的结合约束为您提供了应用程序中不同水平的强度和控制。每个都不会覆盖对方,但层位于顶部。
在看到之前,我们已经使用了一个全球渠道:
设置和实例化的主要限制是:我们不能在这里注入任何依赖项,因为我们将其设置为任何Nestjs模块,那么我们如何解决此问题?
我们可以选择使用基于自定义提供商的语法直接从内部巢模块设置管道
这是以这种方式提供的特殊令牌,使我们能够立即实例化范围并在创建后将其注册为全球渠道<其他构建模块功能也有相同的标记>本质
假设我们要绑定到仅在中间定义的每个路由过程
您也可以通过一个示例:
在实现精确方案时,这是非常有用的。当然,最好的做法是使用类而不是实例,以减少内存使用,因为Nest可以轻松地重复整个模块中相同类型的示例
方法范围:
参数范围仅适用:
到目前为止,这里没有真正做任何事情。
例如,我们现在可以添加此信息;
由于我们不需要任何外部提供商,因此我们可以在main.ts文件中使用应用程序实例来绑定此全局。
然后,我们对其进行测试:
它可以用于检查令牌是否有效,以提出下一个请求
首先创建两个负责人:
第一的:
我们可以保存与之无关的所有内容的通用文件夹。
保护的一个重要要求是实现出口接口
此类返回的值指定当前请求是否允许继续或拒绝访问。
然后在其中添加我们的新产品;
为了确保不推动它,我们将定义一个环境变量。
然后对其进行测试:
在这里,我们需要意识到上一节中提到的当前路由是否被宣布为公开。
那么,我们应该以哪种方式指定应用程序中的哪些端点是公开的?或者您要使用控制器或路由存储任何数据?
这是自定义元数据播放的地方:
上述方法不是最佳实践。我们可以自定义装饰设备以实现相同的功能。
首先,创建一个名称的文件夹,以存储我们可能制造的任何其他未来装饰设备,然后创建。我们需要在此文件中导出两件事:
然后更改它:
为了访问路由守卫中的路由元数据,我们需要使用类,这使我们能够在特定的上下检索元数据数据。
首先注入此类:
目前,以下错误将直接发生:
这是因为必须在上下文中注册其他类别的全球警卫(以便进行实例化)。我们可以直接在文件夹中创建文件
这里的本地配置,因此我们需要删除它;
该测试发现没有成功要求任何标题:
请求未设置标头的路由将失败。
拦截器可以在现有代码中添加其他行为,而无需修改代码本身。它可以使我们:
例如,做类似缓存各种响应的事情;
在这里创建一个示例,我希望我们的所有响应具有属性。在此创建的拦截器将拦截所有引入并自动打包我们数据的请求:
同样,需要在此处实现一个接口:
<注意如何在之后自定义逻辑的>这
同样,我们仍然需要导入它以使用(这是全局介绍):
然后测试帖子创建咖啡的请求:
现在,我们意识到一开始提到的数据包装器:
测试(在数据属性下包裹):
也将其与整体情况联系在一起:
测试(这是Findall中的长时间启动以模拟
但是,此消息并不是特别友好。我们应该如何修改它?
管道的两个用例:
在调用该方法之前,在调用该方法之前删除管道,并且管道还将接收到要将其传递给该方法的参数。Nest提供了几个在框中使用的管道:
创建一条管道,该管道将自动分析传输到整数的任何字符串(当然,Nest已经有一个准备好的管道可以使用,并且在此处进行了重新实现)
与上一个类似,这里需要实现的是接口
添加转换的逻辑:
现在,我们可以将管道绑定到顶部。
中间部分是在处理路由过程和其他构造块之前调用的函数,其中包括拦截器,警卫和管道。中间部分可以访问请求和响应对象,并且不绑定到任何方法,但已绑定到指定的路线路径。中间部分的中部可以执行以下任务:
当使用中间部分是当前的中间件功能未结束请求/响应周期,它必须调用该方法。此方法将将控件传递到下一个中间件功能,否则,请求将被挂起并且永远不会完成。
中部可以是一个函数和类:
创造:
还需要在此处实现该界面:
在此之前,您必须在中间注册。在这里,我们必须首先确保接口中的继承。该界面要求我们提供一种方法作为参数。提供一组有用的方法将中间部分绑定到特定路线。
意识到记录巡回演出时间的中间件:
创建一个用于在此处获得协议的参数装饰器(效果几乎相同):
使用:
原始:https://juejin.cn/post/709794188378777125