【发布时间】:2016-08-01 09:34:45
【问题描述】:
我想知道,在使用数据库调用开发 node.js api 时,保持代码 DRY 的最佳做法是什么。
我好像有很多重复的代码。
例如,看这个:
app.get('/api/users_count', function (req,res) {
pool.connect(function(err, client, done) {
if(err) {
return console.error('error fetching client from pool', err);
}
client.query('SELECT count(*) FROM users;', function(err, result) {
done();
if(err) {
return console.error('error running query', err);
}
res.json({"users count": result.rows[0].count});
});
});
});
还有这个:
app.get('/api/users/:id', function (req,res) {
pool.connect(function(err, client, done) {
if(err) {
return console.error('error fetching client from pool', err);
}
client.query('SELECT name FROM users WHERE id=$1;',req.param.id, function(err, result) {
done();
if(err) {
return console.error('error running query', err);
}
res.json({"user name": result.rows[0].name});
});
});
});
如何避免重复处理错误,连接调用,只关注路由和查询。
谢谢!
【问题讨论】:
-
一方面,您可以使用
pool.query()而不是connect()/query()/done()。 -
谢谢!使用 api 调用和 pool.query 就可以了!我想我可以使用 pool.on 来处理常见的错误,对吧?
-
使用
pool.on()进行全局错误处理的问题是,您可能无法发送HTTP 响应(如500)来指示发生了错误(因为on处理程序将无权访问res)。 -
所以也许最好的方法是创建一个获取路由、查询和 res 的方法,就像 @medet 建议的那样
-
建议的代码与使用
pool.query()(而不是customPool)时的代码基本相同。您仍然需要处理错误(正确地说,return console.log()将导致请求停止)。
标签: node.js postgresql express dry