gpt4 book ai didi

node.js api 保持代码干燥

转载 作者:行者123 更新时间:2023-11-29 12:57:47 25 4
gpt4 key购买 nike

我想知道,在开发带有数据库调用的 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});
});
});


});

如何避免重复错误处理、连接调用,只关注路由和查询。

谢谢!

最佳答案

看看下面的例子,应该会有帮助

//Create fn that connects, pulls data, and passes it to callback
function customPool(query, values, callback) {
pool.connect(function(err, client, done) {
if(err)
return callback(err);
client.query(query, values, function(q_err, result) {
done();
if(q_err)
return callback(q_err);
callback(null, result.rows);
});
}
}

//Reuse it
app.get('/api/users_count', function (req,res) {
var query = 'SELECT count(*) FROM users;';
customPool(query, undefined, function(err, rows) {
if(err)
return console.error('error fetching client from pool', err);
res.json({"users count": rows[0].count});
});
});

app.get('/api/users/:id', function (req,res) {
var query = 'SELECT name FROM users WHERE id=$1;';
customPool(query, req.params.id, function(err, rows) { //<-- notice, req.params.id not req.param.id
if(err)
return console.error('error fetching client from pool', err);
res.json({"users name": rows[0].name});
});
});

关于node.js api 保持代码干燥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38695465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com