【问题标题】:Catch SQL error in Node.js在 Node.js 中捕获 SQL 错误
【发布时间】:2015-08-19 04:58:54
【问题描述】:

我设置了一个 pSQL 表,要求某些数据具有唯一值,我调用该函数以插入该数据:

CREATE OR REPLACE FUNCTION create_location(
                                    name text,
                                    latitude numeric,
                                    longitude numeric,
                                    logo_url text = '')
RETURNS void AS $$
    INSERT INTO "PartySpot".locations (name, latitude, longitude, logo_url)
            VALUES (name, latitude, longitude, logo_url);

$$ LANGUAGE SQL VOLATILE STRICT;

我使用 node.js/express 从端点调用它:

pg.connect(connectionString, function(err, client, done) {

    var query = client.query("SELECT * FROM create_location($1,$2,$3,$4)", 
                    [req.body.name, 
                    req.body.latitude,
                    req.body.longitude,
                    req.body.logo_url]
                );

    query.on('row', function(row) {
        results.push(row);
    });

    query.on('end', function(row) {
        client.end();
        return res.json(results);
    });

    if(err) {
        console.log(err);
    }
});

当密钥是唯一的时,这可以正常工作,但在测试它不是的条件时,而不是if (err) 块捕获的错误,它会无人处理并使服务器崩溃。

处理此类事件的正确方法是什么?有没有办法在 SQL 中做到这一点?

【问题讨论】:

    标签: sql node.js postgresql error-handling


    【解决方案1】:

    您可以在查询对象上添加error 事件处理程序以在查询执行期间捕获错误:

    query.on('error', function(err) {
      console.log('Query error: ' + err);
    });
    

    【讨论】:

      【解决方案2】:

      函数client.query接受三个参数:(query, params, function (err, result){})

      第三个给你一个回调,以在查询执行期间提供错误上下文以及结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 2011-02-23
        • 2013-02-23
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        相关资源
        最近更新 更多