【问题标题】:Inserting multiple rows into db from csv file using node pg使用节点pg将多行从csv文件插入db
【发布时间】:2021-08-09 22:53:58
【问题描述】:

我正在尝试使用 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 ($1, $2)', [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 文件中的多行插入数据库?

【问题讨论】:

    标签: javascript node.js postgresql multer


    【解决方案1】:

    pool.query(...) 是异步的,您可以循环调用它。任何失败都会尝试发送响应。但是,这需要一些时间,然后循环完成并且 201 响应已经发送。

    请参阅How to make a synchronous query (blocking call) with node-postgres? 了解如何同步(阻止)查询调用。

    如果您习惯于顺序样式,可能最简单的方法是调用await pool.query(...)

    【讨论】:

    • awaitpool.query(...) 调用的最简单方法是什么?当我尝试添加它时,我收到以下错误:SyntaxError: await is only valid in async functions and the top level bodies of modules
    • 没关系,意识到我已经像这样添加asyncconst createTrackingCSV = async (request, response) => {...}
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2016-09-15
    • 2017-03-15
    • 1970-01-01
    • 2018-11-28
    • 2020-06-09
    相关资源
    最近更新 更多