使用@nestjsx/crud+TypeORM+PostgreSQL时遇req.parsed解构为空错误
问题描述
我正尝试按照官方文档搭建基础API端点,已成功通过Swagger生成接口页面,但访问http://localhost:3000/app-user/1098时出现如下错误:
ERROR [ExceptionsHandler] Cannot destructure property 'parsed' of 'req' as it is null. TypeError: Cannot destructure property 'parsed' of 'req' as it is null. at AppUserService.getMany (C:\tmp\crud-demo\node_modules\@nestjsx\crud-typeorm\src\typeorm-crud.service.ts:99:13) at AppUserController.getManyBase (C:\tmp\crud-demo\node_modules\@nestjsx\crud\src\crud\crud-routes.factory.ts:215:27) at C:\tmp\crud-demo\node_modules\@nestjs\core\router\router-execution-context.js:38:29
使用的依赖版本如下:
{ "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/typeorm": "^10.0.0", "@nestjsx/crud": "^5.0.0-alpha.3", "@nestjsx/crud-request": "^5.0.0-alpha.3", "@nestjsx/crud-typeorm": "^5.0.0-alpha.3", "pg": "^8.11.3", "typeorm": "^0.3.17" }
解决方案
这个错误源于@nestjsx/crud v5 alpha版本与NestJS v10的兼容性问题,核心是crud模块无法正确处理NestJS v10的请求对象结构,可通过以下方式修复:
- 降级NestJS版本:将
@nestjs/common、@nestjs/core、@nestjs/typeorm降级到v9.x版本(如^9.0.0),v5版本的crud原本就是为NestJS v9设计的,这是最直接的解决办法。 - 注册Crud请求拦截器:在对应功能模块中全局注册
CrudRequestInterceptor,确保请求对象被正确解析:import { Module } from '@nestjs/common'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { CrudRequestInterceptor } from '@nestjsx/crud'; import { AppUserController } from './app-user.controller'; import { AppUserService } from './app-user.service'; @Module({ controllers: [AppUserController], providers: [ AppUserService, { provide: APP_INTERCEPTOR, useClass: CrudRequestInterceptor, }, ], }) export class AppUserModule {} - 检查路由配置:访问
/app-user/1098是单条数据查询,却触发了getMany方法,可能是控制器的@Crud装饰器配置有误,确保正确绑定实体模型:import { Crud, CrudController } from '@nestjsx/crud'; import { AppUser } from './app-user.entity'; import { AppUserService } from './app-user.service'; @Crud({ model: { type: AppUser, }, }) export class AppUserController implements CrudController<AppUser> { constructor(public service: AppUserService) {} }
内容的提问来源于stack exchange,提问作者igorludi
相关产品推荐
相关产品推荐

