如何使用Node.js将JSON数据插入MySQL数据库
嘿,我来帮你梳理如何用Node.js把JSON数据插入MySQL数据库,结合你的现有代码片段一步步拆解,让你能快速上手:
使用Node.js将JSON数据插入MySQL数据库
第一步:确认依赖包已安装
你的代码里用到了mysql、express等工具包,先确保已经通过npm安装:
npm install express mysql flipkart-affiliate moment
第二步:完善数据库连接与插入逻辑
你的代码已经初始化了数据库连接,接下来我们把JSON数据(比如你从flipkart-affiliate获取的优惠信息)插入MySQL的流程拆解清楚:
1. 先确保数据库连接稳定
给连接添加错误处理,避免连接失败后无提示:
var express = require('express'); var app = express(); var affiliate = require('flipkart-affiliate'); var moment = require('moment'); var mysql = require('mysql'); // 数据库连接配置 var connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'coupontest' }); // 连接数据库并处理异常 connection.connect(function(err) { if (err) { console.error('数据库连接失败: ' + err.stack); return; } console.log('已成功连接到数据库,连接ID:' + connection.threadId); });
2. 处理JSON数据并执行插入
假设你已经从第三方接口拿到了JSON格式的优惠数据(比如代码里的title、description等数组),先确保你的MySQL数据库里有对应的数据表,比如可以先创建这样的表:
CREATE TABLE offers ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, start_time DATETIME, end_time DATETIME );
然后编写Node.js插入逻辑,把数组里的JSON数据批量插入到数据库:
// 假设你已经从接口获取到了结构化的优惠数据 var offersData = []; // 把你的title、description等数组转换成对象数组 for(let i = 0; i < title.length; i++){ offersData.push({ title: title[i], description: description[i], startTime: startTime[i], endTime: endTime[i] }); } // 批量插入数据(效率比单条插入高很多) var insertQuery = 'INSERT INTO offers (title, description, start_time, end_time) VALUES ?'; // 用moment转换时间格式为MySQL支持的格式 var insertValues = offersData.map(item => [ item.title, item.description, moment(item.startTime).format('YYYY-MM-DD HH:mm:ss'), moment(item.endTime).format('YYYY-MM-DD HH:mm:ss') ]); connection.query(insertQuery, [insertValues], function(err, result) { if (err) { console.error('插入数据失败:' + err.message); return; } console.log('成功插入 ' + result.affectedRows + ' 条优惠数据'); }); // 服务器关闭时记得关闭数据库连接 process.on('exit', () => { connection.end(); });
3. 结合Express接口接收并插入数据
如果是通过HTTP接口接收外部JSON数据并插入,可以添加Express的JSON解析中间件:
// 解析JSON格式的请求体 app.use(express.json()); // 示例POST接口:接收前端或第三方的JSON数据并插入 app.post('/add-offers', function(req, res) { var incomingOffers = req.body; if(!Array.isArray(incomingOffers)){ return res.status(400).send('请求数据必须是数组格式'); } var insertValues = incomingOffers.map(item => [ item.title, item.description, moment(item.startTime).format('YYYY-MM-DD HH:mm:ss'), moment(item.endTime).format('YYYY-MM-DD HH:mm:ss') ]); connection.query('INSERT INTO offers (title, description, start_time, end_time) VALUES ?', [insertValues], function(err, result) { if (err) { res.status(500).send('插入失败:' + err.message); return; } res.send(`成功插入 ${result.affectedRows} 条数据`); }); }); // 启动Express服务器 app.listen(3000, () => { console.log('服务器运行在 http://localhost:3000'); });
关键注意事项
- 时间格式兼容:MySQL的时间字段只认特定格式,一定要用
moment把JSON里的时间字符串转换成YYYY-MM-DD HH:mm:ss格式。 - 错误捕获:所有数据库操作都要添加错误处理,不然出现问题很难定位原因。
- 批量插入优化:数据量较多时,用
VALUES ?的批量插入方式,比循环单条插入效率提升数倍。 - 字段匹配:确保JSON里的字段和MySQL表的字段名、数据类型完全对应,避免插入失败。
内容的提问来源于stack exchange,提问作者Anandh
相关产品推荐
相关产品推荐

