nest管道验证

目录

使用场景

场景一

第一种解决办法

 第二种解决办法

场景二

写在最后

使用场景

当我们发送请求,请求数据库里面的数据时,如果我们想根据id来获取相应的数据,但是我们的路由动态参数string类型,而数据库里面的id都是int 或者bigint整形,在ts强类型的作用下,必然导致请求失败,这个时候就得对请求的数据做处理,这里以两个场景为例,加深大家对管道的理解和使用。

场景一

我们先起一个服务

 

 可以看到这个1其实是一个string类型的,不妨请求下数据库看一下,这里以prisma ORM为例 连接mysql之后 先在表中添加了一条数据

发现这里报错是因为我们传入的id是string类型,而表里的是int类型对应不上

来看看解决办法

第一种解决办法

用Number(id)强制转化为数字类型

 第二种解决办法

用管道来处理了 在命令行使用nest g pi 文件名      --no-spec是不生成测试文件

 

 value是我们要处理的数据,medata是元信息,我们可以看看里面都有什么 在打印之前需要在要用管道的位置引进去

 

 

 报错就先不管,因为我们在管道还没有做任何处理,可以看到value和medata的结果,这样就可以写逻辑

 

 可以看到我们已经成功获取到了数据,这个管道是我们自己写的,其实在nest中他为我们内置好了9大管道 感兴趣可以看看https://docs.nestjs.com/pipes#pipes 我们来介绍其中的一种和我们自己封装的效果一样

ok,第一个场景我们就介绍完了,再看看第二个,表单的验证,这个应用很广泛,我们来看看。

场景二

先创建一个post请求

 

 我们需要对上传的数据进行验证 比如空值或者字段长度,敏感字等

 这样我们对空值进行了一个验证,但是这样如果表中的数据很多,就会显得很冗余,达不到复用的效果,我们来优化一下。 先安装一下这两个包

我们再src下面创建一个dto文件夹专门存放验证规则的文件 这里的class-validator里面有很多装饰器能供我们使用,这个包在nest官网看不到,只能在github上搜,里面有详细用法

这里的IsNotEmpry为我们实现了空值验证, 接着我们在管道中使用一下

 

 

 我们测试一下

 

 可以看到我们获取了错误信息,我们可以自定义错误的信息

 我们来对数据库发起post请求 

 

 

 发现我们的效果已经实现了,并且封装的管道能够捕捉每个错误的内容,并且将结果返回,很方便我们找到报错的地方。

我们正常请求  

 

写在最后

nest的管道还有很多知识,多看官网文档,多敲代码,知识点很多,慢慢吸收,消化,希望这个管道的验证知识点能够帮到大家!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NestJS中进行Cookie验证可以通过使用中间件来实现。下面是一个简单的示例: 首先,创建一个自定义的Cookie验证中间件: ```typescript // cookie.middleware.ts import { Injectable, NestMiddleware } from '@nestjs/common'; import { Request, Response, NextFunction } from 'express'; @Injectable() export class CookieMiddleware implements NestMiddleware { use(req: Request, res: Response, next: NextFunction) { // 在此处进行Cookie验证逻辑 const authToken = req.cookies.authToken; if (authToken === 'your-secret-token') { next(); // 验证通过,继续处理请求 } else { res.status(401).send('Unauthorized'); // 验证失败,返回未授权状态码 } } } ``` 然后,在模块中将中间件添加到应用程序: ```typescript // app.module.ts import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common'; import { CookieMiddleware } from './cookie.middleware'; import { AppController } from './app.controller'; @Module({ imports: [], controllers: [AppController], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(CookieMiddleware).forRoutes('*'); // 可以指定特定的路由或控制器来应用中间件,也可以使用通配符 * 来应用到所有路由 } } ``` 这样,在每次请求到达时,中间件会检查请求中的authToken Cookie是否匹配预期值。如果匹配,则继续处理请求;如果不匹配,则返回未授权状态码。 请注意,此示例中使用了express的Request和Response对象,因为NestJS底层使用了express框架。如果您使用的是Fastify等其他框架,代码可能会有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值