#javascript #mysql #node.js
#javascript #mysql #node.js
Вопрос:
Я пытаюсь вставить запрос.тело, которое я получаю, представляет собой следующую структуру в базе данных
request.body = [{
"createdAt": "2019-03-11T08:03:11.438",
"deviceType": "type1",
"deviceSerial": "123",
"metricName": "metric1",
"metricValue": "29"
},
{
"createdAt": "2019-03-11T08:03:11.442",
"deviceType": "type2",
"deviceSerial": "234",
"metricName": "metric2",
"metricValue": "29"
},
{
"createdAt": "2019-03-11T08:03:11.442",
"deviceType": "type3",
"deviceSerial": "345",
"metricName": "metric3",
"metricValue": "165"
}
]
Пытаюсь задать запрос.тело в базу данных:
var mysql = require('node-mysql');
var conn = mysql.createConnection({
...
});
var sql = "INSERT INTO Test (created_at, device_type, devices_serial, metric_name, metric_value) VALUES ?";
var values = request.body // <- Here it the problem, I guess
conn.query(sql, [values], function(err) {
if (err) throw err;
conn.end();
});
Я пытаюсь понять, как сконструировать var values
, чтобы он соответствовал следующему формату:
var values = [
['2019-03-11T08:03:11.438', 'type1', '123', 'metric1', '29'],
['2019-03-11T08:03:11.438', 'type2', '234', 'metric2', '29'],
['2019-03-11T08:03:11.438', 'type3', '345', 'metric3', '165'],
];
Комментарии:
1. В чем проблема? Вы получаете какую-либо ошибку?
request
Определено ли на этом этапе?2. Это решение работает, но, вероятно, не самое лучшее. сгенерируйте sql, подобный этому ‘Вставить в…… значения (?,?,?…?), (?,?,?…?)…’ . Каждый () содержит запись в базе данных. А затем последовательно распределяет параметры.
Ответ №1:
Вы можете получить значения объекта в виде массива
var values = request.body.map(r=> Object.values(r));
Ответ №2:
РЕДАКТИРОВАТЬ: Попробуйте это
var mysql = require('node-mysql');
var conn = mysql.createConnection({
...
});
var sql = "INSERT INTO Test (created_at, device_type, devices_serial, metric_name, metric_value) VALUES ?";
var values = request.body.map(Object.values);
conn.query(sql, [values], function (err) {
if (err) throw err;
conn.end();
});
Ответ №3:
Что-то вроде этого должно сработать:
var conn = mysql.createConnection({
..
});
let request = {};
request.body = [{
"createdAt": "2019-03-11T08:03:11.438",
"deviceType": "type1",
"deviceSerial": "123",
"metricName": "metric1",
"metricValue": "29"
},
{
"createdAt": "2019-03-11T08:03:11.442",
"deviceType": "type2",
"deviceSerial": "234",
"metricName": "metric2",
"metricValue": "29"
},
{
"createdAt": "2019-03-11T08:03:11.442",
"deviceType": "type3",
"deviceSerial": "345",
"metricName": "metric3",
"metricValue": "165"
}
];
// Convert to array of arrays.
const values = request.body.map((obj) => Object.values(obj));
const sql = "INSERT INTO Test (created_at, device_type, devices_serial, metric_name, metric_value) VALUES ?";
conn.query(sql, [values], function(err) {
if (err) throw err;
conn.end();
});