如何在Postman中传递NestJS的@Request()对象数据进行测试
如何在Postman中传递NestJS的@Request()对象数据进行测试
兄弟,其实你不用纠结怎么“直接传递”@Request对象里的userId——这个userId根本不是你手动传的,是后端通过你发送的Bearer Token自动解析挂载上去的!我给你捋清楚步骤:
首先回忆下你的业务逻辑:用户登录拿到Bearer Token,前端带着这个Token发请求,后端的认证守卫(比如JwtAuthGuard)会验证Token的合法性,解析出用户ID,然后把它挂载到request对象的userId属性上,所以你在控制器里用@Request()才能拿到req.userId。
那Postman里测试的话,只需要正确携带这个Bearer Token就行,步骤如下:
- 先调用你的登录API,拿到返回的有效Token(你说登录接口已经能返回token和refresh token,这步你肯定搞定了)
- 打开Postman,选中你要测试的接口,切换到Authorization标签页
- 类型选择Bearer Token,然后在Token输入框里粘贴你刚才拿到的那个Token字符串
- 直接发送请求就行!后端会自动完成Token验证,把userId挂载到req上,你在控制器里用@Request()就能正常拿到req.userId了
要是你想跳过认证环节,直接模拟登录用户(比如本地开发测试接口逻辑时),可以搞个临时方案:
- 在你的NestJS项目里加个测试用的拦截器或者修改现有守卫,允许从请求头的自定义字段(比如
X-User-ID)读取用户ID - 比如写个简单的拦截器:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common'; import { Observable } from 'rxjs'; @Injectable() export class TestUserInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const request = context.switchToHttp().getRequest(); // 本地开发时,从请求头获取测试用的用户ID if (process.env.NODE_ENV === 'development') { const testUserId = request.headers['x-user-id']; if (testUserId) { request.userId = testUserId; } } return next.handle(); } }
- 在Postman的请求Headers里添加
X-User-ID: 你的测试用户ID,这样后端就能把这个ID挂载到req.userId上,不用带Token也能测试了
注意哦,这个临时方案只适合本地开发用,上线前一定要关掉或者删掉,不然会有安全风险!
备注:内容来源于stack exchange,提问作者Shantanu Tomar
相关产品推荐
相关产品推荐

