订阅者无法识别 Medusa JS 服务

问题描述 投票:0回答:1

订阅者中未引用Medusa的定制服务

描述错误 我有一个服务自定义,例如我引用了预先存在的示例 onboardingService 当我运行 medusadevelopment 时,我可以在构建时看到响应日志,它说

处理产品变体时发生错误。更新:类型错误:无法读取未定义的属性(读取“onboardingService”)

对错误的清晰、简洁的描述。

系统信息 我的订阅者

//Imports

type Injectables = {
eventBusService: EventBusService;
onboardingService: OnboardingService;
}

class MyProductSubscriber {
private onboardingService: OnboardingService;

    constructor({ onboardingService, eventBusService }: Injectables) {
        this.onboardingService = onboardingService;
        eventBusService.subscribe('product:created', this.onProductCreated);
    
    }
    
    private onProductCreated = async ({id}) => {
        console.log('====================================');
        console.log('Product created', id);
        console.log('====================================');
    
        await this.onboardingService.testService({id})
    }

}

export default MyProductSubscriber;

入职服务

// imports

type InjectedDependencies = {
manager: EntityManager;
onboardingRepository: typeof OnboardingRepository;
};

class OnboardingService extends TransactionBaseService {
protected onboardingRepository\_: typeof OnboardingRepository;

constructor({ onboardingRepository }: InjectedDependencies) {
super(arguments\[0\]);

    this.onboardingRepository_ = onboardingRepository;

}

async retrieve(): Promise\<OnboardingState | undefined\> {
const onboardingRepo = this.activeManager\_.withRepository(
this.onboardingRepository\_
);

    const status = await onboardingRepo.findOne({
      where: { id: Not(IsNull()) },
    });
    
    return status;

}

async testService({id}) {
console.log("testService", id)

}

async update(data: UpdateOnboardingStateInput): Promise\<OnboardingState\> {
return await this.atomicPhase\_(
async (transactionManager: EntityManager) =\> {
const onboardingRepository = transactionManager.withRepository(
this.onboardingRepository\_
);

        const status = await this.retrieve();
    
        for (const [key, value] of Object.entries(data)) {
          status[key] = value;
        }
    
        return await onboardingRepository.save(status);
      }
    );

}
}

export default OnboardingService;

脚本块package.json

"scripts": {
"clean": "cross-env ./node_modules/.bin/rimraf dist",
"build": "cross-env npm run clean && npm run build:server && npm run build:admin",
"build:server": "cross-env npm run clean && tsc -p tsconfig.json",
"build:admin": "cross-env medusa-admin build",
"watch": "cross-env tsc --watch",
"test": "cross-env jest",
"seed": "cross-env medusa seed -f ./data/seed.json",
"start": "npm run build && medusa start -p 9001",
"start:custom": "cross-env npm run build && node --preserve-symlinks --trace-warnings index.js",
"dev": "medusa develop -p 9001"
},

Medusa版本(含插件):7.1.1 Node.js 版本:16.15.0 数据库:postgres 操作系统:windows(docker) 浏览器(如果相关):

重现行为的步骤 在 medusa 启动上运行 转到管理员打开任何产品 更新变体 在控制台中你会看到 错误:处理product-variant.updated时发生错误:TypeError:无法读取pr 未定义的操作(读取“onboardingService”)

预期行为 它应该显示日志 测试服务

期望服务注入在订阅者事件中起作用

service event-handling subscribe medusajs medusa
1个回答
0
投票

添加绑定 this.onProductCreated = this.onProductCreated.bind(this)

© www.soinside.com 2019 - 2024. All rights reserved.