You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node Redis-OM保存实体报错:this[#schema].generateId is not a function

问题描述

使用redis-node-om v0.4.3保存实体到Redis时碰到两个错误:

  1. 调用Repository.save()时抛出:
    TypeError: this[#schema].generateId is not a function at Repository.save
    
    试过旧版Redis-OM的class Session extends Entity {}写法,问题依旧。
  2. 手动指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:26:18