当前位置: 首页 > news >正文

TypeScript Agenda异常 undefined (reading ‘collection‘)

在项目中使用agenda执行一些周期性任务,初始化项目集成agendash时候遇到一个问题

E:\git\agenda-service\node_modules\agendash\lib\controllers\agendash.js:9const collection = agenda._collection.collection || agenda._collection;^
TypeError: Cannot read properties of undefined (reading 'collection')at Agenda.<anonymous> (E:\git\agenda-service\node_modules\agendash\lib\controllers\agendash.js:9:43)at Agenda.emit (node:events:402:35)at Agenda.emit (node:domain:475:12)at JobDbRepository.connect (E:\git\agenda-service\node_modules\@hokify\agenda\src\JobDbRepository.ts:209:15)at processTicksAndRejections (node:internal/process/task_queues:96:5)

该异常显示没有_collection,使用的版本如下package.json

  "devDependencies": {"@types/express": "^4.17.21","@types/node": "^22.5.4","dotenv-cli": "^7.4.2","ts-node": "^10.9.2","typescript": "^5.5.4"},"dependencies": {"@hokify/agenda": "^6.3.0","agendash": "^4.0.0","dotenv": "^16.4.5","express": "^4.19.2"}

可以明确的是agendash 4.0.0的版本是没有解决这个问题的,估计是agenda的数据结构发生了变动,但是agendash这边还没有更新导致的,断点进去看了报错的地方,以下是其中一处在agenda.js中

  agenda.on("ready", () => {const collection = agenda._collection.collection || agenda._collection;collection.createIndexes([{ key: { nextRunAt: -1, lastRunAt: -1, lastFinishedAt: -1 } },{ key: { name: 1, nextRunAt: -1, lastRunAt: -1, lastFinishedAt: -1 } },],(error) => {if (error) {// Ignoring for now}});

断点可以看到与collection类似的属性实际上为db.collection 全局批量替换,可以修复该异常

另外agendash中有一个判定当前连接使用的mongodb的引用到了_mdb,该字段同样没有,确保自己的mongo version大于3.6然后直接注释掉这部分代码

  agenda.on("ready", () => {const collection = agenda.db.collection || agenda.db;collection.createIndexes([{ key: { nextRunAt: -1, lastRunAt: -1, lastFinishedAt: -1 } },{ key: { name: 1, nextRunAt: -1, lastRunAt: -1, lastFinishedAt: -1 } },],(error) => {if (error) {// Ignoring for now}});// Mongoose internals changed at some point. This will fix crash for older versions.// const mdb = agenda._mdb.admin ? agenda._mdb : agenda._mdb.db;// mdb.admin().serverInfo((error, serverInfo) => {//   if (error) {//     throw error;//   }//   if (!semver.satisfies(semver.coerce(serverInfo.version), ">=3.6.0")) {//     throw new Error("MongoDB version not supported");//   }// });});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • word中怎么快速选中光标之前或之后的全部内容?
  • 二、Maven工程的构建--JavaSEJavaEE
  • 软考高级:系统架构设计师——软件架构设计 Chapter 笔记
  • Redis持久化机制—RDB与AOF
  • 海外云手机是否适合运营TikTok?
  • GitLab管理之迁移GitLab群组
  • 基础闯关5
  • ceph-iscsi 手动安装过程中的一些问题记录以及解决办法
  • C# 通过拖控件移动窗体
  • 传统CV算法——基于Opencv的图像绘制
  • ARM编程模型、指令集、ARM汇编语言程序设计
  • Mthrift服务调度
  • Robotframework框架基础
  • 自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法
  • 江协科技STM32学习- P11 中断系统,EXTI外部中断
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Android单元测试 - 几个重要问题
  • Iterator 和 for...of 循环
  • Java 网络编程(2):UDP 的使用
  • Lsb图片隐写
  • Node项目之评分系统(二)- 数据库设计
  • PaddlePaddle-GitHub的正确打开姿势
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python连接Oracle
  • redis学习笔记(三):列表、集合、有序集合
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue官网教程学习过程中值得记录的一些事情
  • 初识 webpack
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 数据库巡检项
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $(selector).each()和$.each()的区别
  • $.ajax中的eval及dataType
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (六)软件测试分工
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)负载均衡,回话保持,cookie
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET MVC 验证码
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net连接oracle数据库
  • .net专家(张羿专栏)
  • @GetMapping和@RequestMapping的区别
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
  • [Day 26] 區塊鏈與人工智能的聯動應用:理論、技術與實踐