使用节点 pg 从 csv 文件将多行插入 db

Inserting multiple rows into db from csv file using node pg

我正在尝试使用 node-pgmulterpapa 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(...) 调用。