使用PostgreSQL请求在数组中循环



我正试图将数组的内容存储在数据库中。我想为数组中的每个项目添加一个新行。目前我正在运行:

router.post('/saveVenueMatches', (req, res) => {
const id = req.body.user_id;
const data = req.body.data;
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
for (const venue of data) {
let sqlText = `INSERT INTO user_matches (user_id, venue_id) VALUES ($1, $2)`;
pool
.query(sqlText, [id, venue.id])
.then((response) => {
res.send(response.rows);
})
.catch((err) => {
console.log('Error saving venue matches', err);
});
}
});

这导致成功地发布到我的数据库中,但是我的服务器为数组中的每个项目返回以下错误一次:

Error saving venue matches Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
{
code: 'ERR_HTTP_HEADERS_SENT'
}

我试着删除了我设置标题的那一行,但还是出现了错误。我不太清楚是什么原因造成的。

此外,如果有更好的方式提出这样的请求,请告诉我。

您试图在周期的每次迭代中向客户端发送一个结果,但只能发送一次。尝试在一个周期后发送结果,或者更好地将周期转换为Promise.all调用

我的建议是一次使用多个插入,不要尝试多次访问数据库。

你可以使用这个npm包一次插入多个

const pg = require('pg');
const format = require('pg-format');

你只需要相应地格式化你的数据

let user_matches = [[1, 2], [2, 3]];
let query1 = format('INSERT INTO users (user_id, venue_id) VALUES %L returning id', user_matches);
let {rows} = await client.query(query);

为了参考,你可以访问这个网站点击此处

最新更新