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

使用RequireJS加载cassandra-driver模块报错及Client构造问题求助

解决DataStax Cassandra Driver在ES模块下的加载错误

问题分析

你遇到的核心问题是混用了RequireJS异步加载机制与Node.js原生模块系统:

  • 单独运行connect-database.mjs时,环境默认采用CommonJS加载逻辑,RequireJS的require临时兼容了模块加载;
  • 但通过main.js以ES模块方式导入后,RequireJS的上下文未正确初始化,触发"Module name 'cassandra-driver' has not been loaded yet"错误;
  • 改用RequireJS异步require([])时,模块返回结构与CommonJS不同,导致解构出的Client为undefined,进而出现"Client is not a constructor"错误。

解决方案

直接使用Node.js原生ES模块加载cassandra-driver,无需依赖RequireJS:

步骤1:修改connect-database.mjs

移除RequireJS相关代码,改用原生ES模块import:

import { Client } from "cassandra-driver";

export async function run() {
  const client1 = new Client({
    cloud: {
      secureConnectBundle: "secure-connect-amazonfeud.zip"
    },
    credentials: {
      username: "<my username>",
      password: "<my password>"
    },
  });
  
  await client1.connect();

  // 执行查询与更新
  const rs = await client1.execute("SELECT * FROM feud.users");
  await client1.execute("UPDATE feud.users SET score=250 WHERE id=1");
  
  console.log(rs.rows[0]);
  console.log(`Your cluster returned ${rs.rowLength} row(s)`);

  await client1.shutdown();
}

步骤2:确保Node.js识别ES模块

在项目根目录的package.json中添加以下配置,让Node.js将.js/.mjs文件当作ES模块处理:

{
  "type": "module"
}

步骤3:正常运行main.js

你的main.js无需修改,直接运行即可:

import { run } from "./connect-database.mjs";

run();

关键说明

  • cassandra-driver本身原生支持ES模块,无需额外加载器;
  • 避免在Node.js环境中混用RequireJS与原生模块系统,二者的模块加载逻辑完全不同;
  • 原代码中get语法是多余的,直接配置静态属性即可简化代码。

内容的提问来源于stack exchange,提问作者Jojo Momo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:20:21