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

使用mysql2连接AWS Aurora DB报错:TypeError: (intermediate value)不可迭代

问题:mysql2连接AWS Aurora失败,抛出"not iterable"错误

我当前使用mysql2连接AWS Aurora数据库,但无法连接集群或获取任何记录。代码如下:

connection = createConnection({
            host: 'music-instance-2.cairvpszramp.us-east-1.rds.amazonaws.com',
            user: 'user',
            password: 'password',
            database: 'music'
        });

    console.log("Before Connection")

    const [rows, fields] = await connection.execute('USE Music;SELECT * FROM artist;');
    console.log("After Connection")

    return {
        statusCode: 200,
        body: JSON.stringify(rows)
    };

运行时持续抛出以下错误:

Error Caught TypeError: (intermediate value) is not iterable at Runtime. (/var/task/index.js:27:36) at Generator.next () at fulfilled (/var/task/index.js:5:58)

环境说明

  • 使用TypeScript,代码运行在Node.js 18版本的AWS Lambda函数中。

console.log(data)输出如下:

_events: [Object: null prototype] {},_eventsCount: 0,
_maxListeners: undefined, next: null, statement: undefined, sql: 'USE Music;SELECT * FROM artist;', values: undefined, onResult: undefined,
parameters: undefined, insertId: 0,timeout: undefined, queryTimeout:
null,
_rows: [],
_fields: [],
_result: [],
_fieldCount: 0,
_rowParser: null,
_executeOptions: { sql: 'USE Music;SELECT * FROM artist;', values: undefined },
_resultIndex: 0,
_localStream: null,
_unpipeStream: [Function (anonymous)],
_streamFactory: undefined,
_connection: null, [Symbol(kCapture)]: false


错误含义

这个错误表示你尝试对一个不可迭代的值使用数组解构(const [rows, fields] = ...)。mysql2的execute方法执行多语句(你这里写了USE Music;SELECT * FROM artist;两条SQL)时,默认不会返回可解构的[rows, fields]数组,而是返回一个查询对象(从你console.log的输出也能看到,是包含_rows、_fields等属性的对象),所以解构操作会失败。

修复方案

1. 移除多余的USE语句,简化查询

你已经在连接配置里指定了database: 'music',不需要再执行USE Music;,直接执行查询语句即可:

const [rows, fields] = await connection.execute('SELECT * FROM artist;');

2. 若需执行多语句,开启多语句支持并正确解构

如果必须执行多条SQL语句,需要先在连接配置中开启multipleStatements: true,然后对多语句的返回结果做对应解构:

// 修改连接配置
connection = createConnection({
    host: 'music-instance-2.cairvpszramp.us-east-1.rds.amazonaws.com',
    user: 'user',
    password: 'password',
    database: 'music',
    multipleStatements: true // 开启多语句支持
});

// 执行多语句并解构结果:第一个语句是USE,无有效返回;第二个是查询结果
const [[_, __], [rows, fields]] = await connection.execute('USE Music;SELECT * FROM artist;');

3. 额外排查项

  • 确认AWS Lambda的安全组允许访问Aurora集群的3306端口(默认MySQL端口);
  • 检查Aurora的访问控制列表是否包含Lambda所在VPC的权限或IP范围;
  • 保持数据库名大小写一致:连接配置里是小写music,SQL里是大写Music,虽然MySQL默认不区分大小写,但尽量统一避免潜在问题。

内容的提问来源于stack exchange,提问作者Karim Fayed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:28:19