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

如何将客户端传来的JSON对象存入MySQL数据库?

如何将JSON数据存入MySQL数据库

Got it,咱们一步步来搞定把JSON数据存入MySQL的问题,重点要兼顾安全性和正确性:

首先,先确认你已经安装了合适的MySQL驱动——推荐用mysql2,它支持Promise和更现代的特性,比旧版mysql包好用不少。如果还没装,先跑这个命令:

npm install mysql2

1. 先搞定数据库连接(推荐用连接池)

单个数据库连接效率低,用连接池能更好地复用连接,避免频繁创建销毁的开销:

const mysql = require('mysql2/promise'); // 用Promise版本,方便异步操作

// 配置你的数据库信息
const pool = mysql.createPool({
  host: '你的数据库主机地址',
  user: '数据库用户名',
  password: '数据库密码',
  database: '你的目标数据库名',
  connectionLimit: 10, // 最大连接数
  waitForConnections: true
});

2. 完善POST接口的插入逻辑

这里有几个关键细节要注意:

  • 绝对不能直接拼接SQL字符串!要用参数化查询(占位符?)防止SQL注入,这是安全底线。
  • 你的dob是DD-MM-YYYY格式,MySQL的DATE类型要求YYYY-MM-DD,得先转格式;如果你的表dob字段是VARCHAR,可以跳过转换,但更推荐存成DATE类型方便后续查询。
  • 数据库操作是异步的,用async/await让代码更易读。

完整的接口代码如下:

app.post('/addUser', async function (req, res) {
  try {
    // 从请求体里解构出需要的数据
    const { registerationId, firstName, lastName, dob, cnic, gender } = req.body;

    // 转换日期格式:DD-MM-YYYY → YYYY-MM-DD
    const [day, month, year] = dob.split('-');
    const formattedDob = `${year}-${month}-${day}`;

    // 执行参数化插入查询
    const [result] = await pool.execute(
      'INSERT INTO students (registrationId, firstName, lastName, dob, cnic, gender) VALUES (?, ?, ?, ?, ?, ?)',
      [registerationId, firstName, lastName, formattedDob, cnic, gender]
    );

    // 插入成功后返回友好响应
    res.status(201).json({
      message: '用户添加成功',
      insertedUserId: result.insertId // 返回插入数据的主键ID
    });
  } catch (error) {
    // 捕获并处理错误,比如重复的registrationId、数据库连接失败等
    console.error('插入数据出错:', error);
    res.status(500).json({
      message: '添加用户失败',
      error: error.message
    });
  }
});

3. 确保你的students表结构匹配

你的数据库表得有对应的字段,比如可以用这个SQL创建表:

CREATE TABLE students (
  id INT AUTO_INCREMENT PRIMARY KEY,
  registrationId INT NOT NULL UNIQUE, -- 注册ID设为唯一,避免重复插入
  firstName VARCHAR(50) NOT NULL,
  lastName VARCHAR(50) NOT NULL,
  dob DATE,
  cnic BIGINT, -- 如果身份证号有前导零,建议改成VARCHAR(15)类型
  gender ENUM('Male', 'Female', 'Other') NOT NULL,
  createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

额外注意事项

  • 数据验证:最好在插入前对用户输入做验证(比如检查dob格式是否合法、cnic长度是否符合要求),可以用express-validator或者joi这类库。
  • 错误细分:如果是唯一键冲突(比如registrationId重复),可以在catch里判断错误码,给客户端返回更精准的提示,比如“该注册ID已存在”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:27:28