使用节点 pg 从 csv 文件将多行插入 db
Inserting multiple rows into db from csv file using node pg
我正在尝试使用 node-pg
、multer
和 papa parse
将 csv 文件中的多行添加到我的 postgres 数据库中。我尝试了以下方法:
const createTrackingCSV = (request, response) => {
// storing the csv file using multer memoryStorage()
let upload = multer({ storage: multer.memoryStorage(), fileFilter: fileFilter }).single('fileUploaded');
upload(request, response, function(err) {
var results = Papa.parse(String(request.file.buffer), {
header: true
});
var uploadObj = results.data;
uploadObj.forEach(function(obj) {
pool.query('INSERT INTO tracking (col1, col2) VALUES (, )', [obj.test1, obj.test2], (error, results) => {
if(error) {
console.log(error);
response.sendStatus(500);
return;
}
})
});
response.status(201).send('Successfully inserted');
});
}
当我尝试插入 csv 文件的内容时,这种方法会导致以下错误:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我犯了什么错误/是否有不同的方法可以尝试将 csv 文件中的多行插入数据库?
pool.query(...)
是异步的,你循环调用。任何失败都会尝试发送响应。然而,这些需要一些时间,到那时循环完成并且 201 响应已经发送。
请参阅 How to make a synchronous query (blocking call) with node-postgres? 了解如何同步(阻塞)查询调用。
如果您习惯于顺序样式,可能最简单的方法是 await
pool.query(...)
调用。
我正在尝试使用 node-pg
、multer
和 papa parse
将 csv 文件中的多行添加到我的 postgres 数据库中。我尝试了以下方法:
const createTrackingCSV = (request, response) => {
// storing the csv file using multer memoryStorage()
let upload = multer({ storage: multer.memoryStorage(), fileFilter: fileFilter }).single('fileUploaded');
upload(request, response, function(err) {
var results = Papa.parse(String(request.file.buffer), {
header: true
});
var uploadObj = results.data;
uploadObj.forEach(function(obj) {
pool.query('INSERT INTO tracking (col1, col2) VALUES (, )', [obj.test1, obj.test2], (error, results) => {
if(error) {
console.log(error);
response.sendStatus(500);
return;
}
})
});
response.status(201).send('Successfully inserted');
});
}
当我尝试插入 csv 文件的内容时,这种方法会导致以下错误:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我犯了什么错误/是否有不同的方法可以尝试将 csv 文件中的多行插入数据库?
pool.query(...)
是异步的,你循环调用。任何失败都会尝试发送响应。然而,这些需要一些时间,到那时循环完成并且 201 响应已经发送。
请参阅 How to make a synchronous query (blocking call) with node-postgres? 了解如何同步(阻塞)查询调用。
如果您习惯于顺序样式,可能最简单的方法是 await
pool.query(...)
调用。