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

如何在TypeScript中调用MySQL存储过程并返回普通对象数组

TypeScript 直连MySQL调用存储过程实现方案

前置依赖安装

无需引入任何ORM包,直接使用维护活跃度更高的mysql2驱动即可,API完全兼容你原有写的mysql驱动逻辑,同时内置完整TypeScript类型支持:

  • 安装核心驱动:npm install mysql2
  • 安装基础类型依赖:npm install -D @types/node

可直接运行的TypeScript实现代码

推荐写法(Async/Await 风格)

import mysql, { RowDataPacket } from 'mysql2/promise';

// 初始化数据库连接
const connection = await mysql.createConnection({
  host: '127.0.0.1', // 替换为你的数据库地址
  user: 'root', // 替换为你的数据库账号
  password: 'your_password', // 替换为你的数据库密码
  database: 'your_db_name', // 替换为你的目标库名
  // 以下配置为直接返回普通对象、跳过额外格式转换的核心参数
  decimalNumbers: true,
  supportBigNumbers: true,
  dateStrings: false,
  rowsAsArray: false
});

// 定义存储过程返回的数据结构,字段和存储过程返回列一一对应即可
interface MIJobFilterItem extends RowDataPacket {
  id: string;
  // 其余业务字段按实际返回列补充定义
}

// 调用存储过程,使用?占位符传参避免SQL注入,不要直接拼接参数到SQL字符串
const [queryResults] = await connection.query<MIJobFilterItem[][]>(
  'CALL spMIJobFilter_lst(?)',
  ['4261ebf7-614c-4b6c-9dff-39044a048b26']
);

// 存储过程默认返回嵌套数组,取第一个元素就是目标数据集
const resultList = queryResults[0];
resultList.forEach(item => {
  console.log(item); // 此处item即为原生普通JS对象,无JSON序列化转换环节
});

// 操作完成后关闭连接
await connection.end();

兼容原有逻辑的回调风格写法

如果你要保持原代码的回调写法,不需要改异步逻辑,可直接用以下版本:

import mysql, { RowDataPacket } from 'mysql2';

const connection = mysql.createConnection({
  host: '127.0.0.1',
  user: 'root',
  password: 'your_password',
  database: 'your_db_name',
  decimalNumbers: true,
  supportBigNumbers: true,
  dateStrings: false,
  rowsAsArray: false
});

interface MIJobFilterItem extends RowDataPacket {
  id: string;
}

connection.query<MIJobFilterItem[][]>(
  'CALL spMIJobFilter_lst(?)',
  ['4261ebf7-614c-4b6c-9dff-39044a048b26'],
  (error, results) => {
    if (error) throw error;
    const resultList = results[0];
    resultList.forEach(result => {
      console.log(result);
    });
    connection.end();
  }
);

返回普通对象数组的配置说明

你感知到的“自动转JSON”本质是老版mysql驱动默认对Decimal、Date、BigInt等特殊类型做了字符串格式化处理,并不是真的做了JSON序列化。只要在创建连接时加上前文列出的4个配置项,驱动就会直接返回对应JS原生类型的普通对象数组,不需要额外做JSON反序列化处理,拿到结果可以直接在业务逻辑中使用。

注意:不要把参数直接拼接进CALL语句,统一用?占位符传参,驱动会自动做特殊字符转义,从根源避免SQL注入风险。存储过程的返回结果默认多嵌套一层数组,取索引为0的元素即可拿到目标查询集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:18:19