Node Redis-OM保存实体报错:this[#schema].generateId is not a function
问题描述
使用redis-node-om v0.4.3保存实体到Redis时碰到两个错误:
- 调用
Repository.save()时抛出:
试过旧版Redis-OM的TypeError: this[#schema].generateId is not a function at Repository.saveclass Session extends Entity {}写法,问题依旧。 - 手动指定ID调用
save()时,触发新错误:TypeError: Cannot read properties of undefined (reading 'forEach')
已确认Redis驱动连接正常,Schema和仓库创建流程符合预期。
解决方案
检查Schema与实体类的绑定
v0.4.3版本要求Schema必须正确关联实体类,不能传实体实例。正确写法:const { Entity, Schema } = require('redis-node-om'); class Session extends Entity {} // 第一个参数传实体类,不是new Session() const sessionSchema = new Schema(Session, { userId: { type: 'string' }, expiresAt: { type: 'number' } });确保仓库实例化及索引创建正确
创建Repository时要传入正确的Schema和Redis客户端,且必须调用createIndex():const { Repository } = require('redis-node-om'); // 假设client是已连接的Redis客户端 const sessionRepo = new Repository(sessionSchema, client); // 首次运行或Schema变更时必须执行 await sessionRepo.createIndex();手动指定ID的正确方式
不要自定义id字段,用框架指定的entityId属性设置:const session = new Session(); session.entityId = 'my-custom-id'; // 正确指定ID的方式 session.userId = 'user-456'; session.expiresAt = Date.now() + 3600000; await sessionRepo.save(session);清理旧索引并重新创建
如果之前在Redis中创建过不兼容的索引,用FT.DROPINDEX命令删除后,再重新执行createIndex()。版本兼容调整
v0.4.3属于旧版本,若以上方法无效,可尝试降级到v0.4.x的稳定子版本,或核对官方文档确认API细节。
内容的提问来源于stack exchange,提问作者Estiwer
相关产品推荐
相关产品推荐

