Nest.js跨模块调用服务创建记录及对象未定义错误修复
问题修复与跨模块调用验证
一、修复"Cannot set property 'name' of undefined"错误
这个错误的核心原因是你只声明了storeMain的类型,但没有初始化对象实例,导致storeMain为undefined,无法给它的属性赋值。
修复方式:
根据StoreMain的类型(类/接口)选择对应的初始化方式:
情况1:StoreMain是接口
直接用对象字面量初始化并赋值:
// Create object StoreMainDocument let storeMain: StoreMain = { name: user.name, url: user.path, type: "Type", user_id: user._id };
情况2:StoreMain是类(比如Mongoose的实体类)
先实例化对象,再赋值属性:
// Create object StoreMainDocument let storeMain = new StoreMain(); storeMain.name = user.name; storeMain.url = user.path; storeMain.type = "Type"; storeMain.user_id = user._id;
或者通过构造函数传参初始化:
let storeMain = new StoreMain({ name: user.name, url: user.path, type: "Type", user_id: user._id });
二、跨模块调用方式的正确性验证
在Nest.js中跨模块调用服务是合理的,但需要满足以下条件:
提供服务的模块需要暴露服务
假设StoreMainService属于SecondaryModule,需要在该模块的@Module装饰器中把服务加入exports数组:@Module({ providers: [StoreMainService], exports: [StoreMainService] // 暴露服务给其他模块 }) export class SecondaryModule {}调用方模块需要导入提供服务的模块
包含MainController的MainModule需要导入SecondaryModule:@Module({ controllers: [MainController], imports: [SecondaryModule], // 导入模块以使用其服务 providers: [UserService] }) export class MainModule {}控制器正确注入服务
确保MainController的构造函数中正确注入StoreMainService:constructor( private readonly userService: UserService, private readonly storeMainService: StoreMainService // 注入跨模块服务 ) {}
如果以上三点都满足,你的跨模块调用方式就是正确的。
内容的提问来源于stack exchange,提问作者Kevin Corona
相关产品推荐
相关产品推荐

