在Node.js中捕获SQL错误

我有一个pSQL表设置为要求一些数据的唯一值,我打电话插入这个数据的function:

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); } }); 

当密钥是唯一的时候,这可以正常工作,但是在testing不是由if (err)块捕获的错误的情况下,它会变得不受控制并使服务器崩溃。

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

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

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

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

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