【发布时间】:2021-08-12 18:34:10
【问题描述】:
我有一个方法,我想bulk insert 进入 mysql。我正在使用NodeJS 和mysql2。
我的方法:
createWorklog = async ({ sqlArray }) => {
const sql = `INSERT INTO ${this.tableName}
(project_id, user_id, date, duration, task, description) VALUES ?`
const result = await query(sql, [sqlArray])
const affectedRows = result ? result.affectedRows : 0;
return affectedRows;
}
其中sqlArray 是array of arrays,其中所有子数组的长度相同。
而该方法中调用的query方法是下一个:
query = async (sql, values) => {
return new Promise((resolve, reject) => {
const callback = (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
}
// execute will internally call prepare and query
this.db.execute(sql, values, callback);
}).catch(err => {
const mysqlErrorList = Object.keys(HttpStatusCodes);
// convert mysql errors which in the mysqlErrorList list to http status code
err.status = mysqlErrorList.includes(err.code) ? HttpStatusCodes[err.code] : err.status;
throw err;
});
}
}
我的问题是 body parameters 没问题(正如我所说,数组数组)但是方法抛出 500。
这可能因为mysql2 中存在的execute 命令而成为可能吗?或者是另一个错误?
感谢您的宝贵时间!
编辑
根据@Gaurav 的回答,我将方法从使用“执行”更改为“查询”,效果很好。
【问题讨论】:
-
500 是一个 http 错误。它可能是在您在 nodejs 代码中执行
throw err时生成的。我建议你使用console.err(err)来显示mysql 错误。此外,npm mysql2 原生处理await db.execute();你不需要自己承诺。您可以大大简化您的代码。这将有助于排除故障。 -
在这里找到有用的资源 --> github.com/sidorares/node-mysql2/issues/830
标签: mysql node.js bulkinsert node-mysql2