JavaScript调用YouTube API插入MySQL出现空数据该如何解决
问题原因
你插入空数据的核心问题有两个:
- 现有代码中YouTube API请求逻辑和MySQL插入逻辑完全分离,拿到的API返回数据没有传递给插入操作
- INSERT语句中的
kind, etag, id, snippet是未赋值的无效变量,MySQL识别为无有效值,因此插入空记录
修复步骤
- 第一步:合并API请求和数据库插入逻辑,确保拿到API返回数据后再执行插入操作
- 第二步:修正插入语句,使用参数化查询传入真实的字段值,同时避免SQL注入风险
- 第三步:遍历API返回的
items数组,逐个提取字段后插入数据库
修复后的完整示例代码
const https = require('https'); const mysql = require('mysql') // 配置参数 const API = 'AIzaSy************************'; const YOUTUBE_URL = `https://www.googleapis.com/youtube/v3/search/?part=snippet&key=${API}&q=test&maxResults=20`; // 数据库连接配置 const con = mysql.createConnection ({ host: 'sql5.freemysqlhosting.net', user: 'sql*******', password: '**********Ti', database: 'sql******', port: '3306' }); // 先连接数据库,再发起API请求 con.connect(function(err) { if (err) throw err; console.log("数据库连接成功"); // 发起YouTube API请求 https.get(YOUTUBE_URL, res => { let rawData = ''; res.on('data', chunk => { rawData += chunk; }); res.on('end', () => { const result = JSON.parse(rawData); const items = result.items || []; // 遍历返回结果逐个插入 items.forEach(item => { // 提取对应字段,复杂字段可以转成JSON字符串存储 const insertData = [ item.kind, item.etag, typeof item.id === 'object' ? JSON.stringify(item.id) : item.id, JSON.stringify(item.snippet) ]; // 参数化插入语句 const sql = `INSERT INTO YouTube_API_DB_Conn (kind, etag, id, snippet) VALUES (?, ?, ?, ?)`; con.query(sql, insertData, function(err, result) { if (err) throw err; console.log(`插入成功,记录ID:${result.insertId}`); }); }) }) }).on('error', err => { console.log('API请求错误:', err.message); }) });
额外注意事项
- 如果你的
id和snippet字段是文本类型,直接存JSON字符串即可,如果是结构化字段需要提前拆分snippet里的子字段对应插入 - 所有插入操作完成后可以手动调用
con.end()关闭数据库连接 - 测试时可以先打印
insertData的内容,确认字段取值正确再执行插入
内容的提问来源于stack exchange,提问作者Paolo Pajarillo
相关产品推荐
相关产品推荐

