使用快速数组参数

时间:2017-11-05 01:51:30

标签: mysql arrays node.js

我遇到过需要在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

1 个答案:

答案 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);
         }
    )
});