我遇到过需要在Node项目中使用批量插入的情况。
这当然已在这里得到解答:How do I do a bulk insert in mySQL using node.js
但是,我有一个快速项目,我用它来创建一个api。参数变成了一个数组,我在使用带有批量插入的数组时遇到了麻烦。每当我尝试使用该路由时,都会收到Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1
经过一番挖掘后,我发现它试图插入:
['foo', 'bar', 'test']
当我需要它插入时:
['foo']
['bar']
['test']
无论如何,这是整个代码:
router.post("/", function (req, res, next) {
db.query(
"REPLACE INTO user (`Name`) VALUES (?)",
[req.query.array],
function (error, response) {
if (error) throw error;
console.log(response);
}
)
});
let requestUrl = "http://localhost:3000/user?";
// External api request which returns a list of users
for (let i = 0; i < body.users.length; i++) {
requestUrl += `array=${body.users[i]}&`
}
let addUserRequest = {
url: requestUrl,
method: "POST"
};
request(addUserRequest, function (error, response, body) {
console.log(body);
});
生成的网址是:
http://localhost:3000/user?array=foo&array=bar&array=test
答案 0 :(得分:1)
试试这个,
var datatoDB = [];
req.query.array.forEach(function(entry) {
console.log(entry);
datatoDB.push([entry]);
});
我们正在尝试将此['foo', 'bar', 'test']
转换为此[["foo"], ["bar"], ["test"]]
。
现在,在函数中使用datatoDB。
router.post("/", function (req, res, next) {
db.query(
"REPLACE INTO user (Name) VALUES ?",
[datatoDB],
function (error, response) {
if (error) throw error;
console.log(response);
}
)
});