如何将Apache Ignite与NestJS连接?遇构造函数错误求助
解决Apache Ignite Client与NestJS集成的构造函数错误
错误原因
你遇到的TypeError: apache_ignite_client_1.default is not a constructor是因为导入方式不正确。apache-ignite-client库采用命名导出而非默认导出,默认导入会导致无法正确获取构造函数。
修复步骤
1. 修正导入语句
将默认导入改为命名导入,同时加载所需的类:
import { Injectable } from '@nestjs/common'; import { IgniteClient, SqlFieldsQuery } from 'apache-ignite-client';
2. 修正SqlFieldsQuery实例化代码
原代码中new SqlFieldsQuery.query(...)是错误写法,SqlFieldsQuery本身就是构造函数,直接实例化即可:
async getData() { // 检查连接状态,避免重复发起连接请求 if (!this.igniteClient.isConnected()) { await this.connect(); } const query = new SqlFieldsQuery("SELECT * FROM alarms"); const result = await this.igniteClient.query(query); return result.getAll(); }
3. 优化连接逻辑(可选)
每次调用getData都触发connect会导致重复连接,建议在服务初始化时完成连接,或在connect方法中添加状态判断:
constructor() { this.igniteClient = new IgniteClient(); // 初始化阶段自动尝试连接 this.connect().catch(err => console.error('Ignite连接失败:', err)); } async connect() { if (!this.igniteClient.isConnected()) { await this.igniteClient.connect('localhost:10800'); } }
完整修复后的代码
import { Injectable } from '@nestjs/common'; import { IgniteClient, SqlFieldsQuery } from 'apache-ignite-client'; @Injectable() export class AlarmsService { private igniteClient: IgniteClient; constructor() { this.igniteClient = new IgniteClient(); this.connect().catch(err => console.error('Ignite连接异常:', err)); } async connect() { if (!this.igniteClient.isConnected()) { await this.igniteClient.connect('localhost:10800'); } } async getData() { await this.connect(); const query = new SqlFieldsQuery("SELECT * FROM alarms"); const result = await this.igniteClient.query(query); return result.getAll(); } }
内容的提问来源于stack exchange,提问作者Ajay Kakde
相关产品推荐
相关产品推荐

