node.js api 保持代码干燥

标签 node.js postgresql express dry

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

相关文章:

database - 如何优化 PostgreSQL 配置? (有没有可用的工具?)

node.js - 在各个目录中加载 Jade 模板?

node.js - 在路由路径中搜索公共(public)文件夹

javascript - 如何从 MongoDB 中清除重复的对象

javascript - 模块名称 "mysql"尚未加载上下文 : _. 使用 require([]) http ://requirejs. org/docs/errors.html#notloaded

javascript - 创建正则表达式来忽略 .goutputstream 文件

javascript - 通过express发送一个对象及其父类

node.js - Mongoose 在自定义 _id 上查找不起作用

java - 设置 Spring Boot 应用程序以根据 session 的环境参数连接到不同的数据源

postgresql - 函数 ts_rank_cd(text, tsquery) 不存在