node.js - 循环通过 json API 并将值插入 MySQL Node JS
问题描述
我正在尝试使用 Node JS 将特定数据从 WEB API 保存到我的 MySql 数据库,但我遇到了麻烦。
这是我的 API。
我需要从每个设备中获取以下值。
- ID
- 姓名
- 类型
- 启用
- 价值
到目前为止,我一直在尝试使用以下代码,但它似乎只适用于最后一个 ID?我正在计算设备 ID 是否已经在我的数据库中,如果没有,它将添加设备以及所有数据。否则,它将连同值一起输出 ID(并更新数据库中的相应数据)。我的目标是每隔几秒钟请求一次 API,遍历每个设备 ID 并更新我的数据库。这是我想要实现的唯一解决方案,到目前为止它只是让我头疼。非常感谢任何知道如何实现这一目标或我做错了什么的人。
fetch('http://127.0.0.1:3000/test', settings)
.then(res => res.json())
.then((json) => {
for (var i = 0; i < json.length; i++) {
json.id = json[i].id;
json.value = json[i].properties.value;
json.name = json[i].name;
json.type = json[i].type;
json.enabled = json[i].enabled;
connection.query('SELECT COUNT(*) AS exist FROM devices WHERE id = ? AND state = ?;', [json.id, "enabled"], function(error, rows, fields) {
if (error) {
console.log(error);
}
if (rows[0].exist == 0) {
connection.query('INSERT INTO devices(id, name, value, type, state) VALUES( ? , ? , ? , ? );', [json.id, json.name, json.value, json.type, json.enabled], function(error, rows, fields) {
if (error) {
console.log(error);
}
});
} else if (rows[0].exist == 1) {
console.log(json.id + ";" + json.value);
}
});
};
});
解决方案
我认为这里的问题是您正在修改循环中的设备数组,这会导致一些奇怪的行为。
我建议填充一个单独的设备变量,然后在插入查询中使用它,如下所示:
fetch('http://127.0.0.1:3000/test', settings)
.then(res => res.json())
.then((json) => {
for (var i = 0; i < json.length; i++) {
console.log(`inserting device: ${i+1} of ${json.length}:`, json[i]);
const device = { ...json[i], value: json[i].properties.value };
connection.query('SELECT COUNT(*) AS exist FROM devices WHERE id = ? AND state = ?;', [device.id, "enabled"], function(error, rows, fields) {
if (error) {
console.log(error);
}
if (rows[0].exist == 0) {
connection.query('INSERT INTO devices(id, name, value, type, state) VALUES( ? , ? , ? , ?, ? );', [device.id, device.name, device.value, device.type, device.enabled], function(error, rows, fields) {
if (error) {
console.log(error);
}
});
} else if (rows[0].exist == 1) {
console.log(device.id + ";" + device.value);
}
});
};
});
我还必须将插入 SQL 查询修改为:
INSERT INTO devices(id, name, value, type, state) VALUES( ? , ? , ? , ?, ? );
推荐阅读
- python - Python:正则表达式参数的可能语法错误
- sql - 如何找到在文档编号中创建的 Gap?
- javascript - React - 通过函数调用传递道具
- python - 如何在python中使用wget下载多个同名文件
- python - 使用 Python Wand 从 PPM P3 转换为 PPM P6 并返回
- r - 如何将自动播放按钮添加到闪亮的应用程序
- kubernetes - Minikube - 无效选项“-p”
- javascript - 如何在多维数组深处的值发生变化后重新渲染 HTML 元素?
- amazon-web-services - 无法直接从浏览器访问 sftp 服务器
- c# - 在 3D 单人游戏项目中,如何将对象放置在相机前方一定距离处?