今天以 postgresql数据库为例,介绍下 koa2 中如何操作数据库。
所需中间件
下面使用到了以下中间件:
1 | koa-pg |
代码示例
使用客户端连接数据库
postgre.js:
1 | const pg = require('pg'); |
app.js:
1 | const Koa = require('koa'); |
上面的代码中,postgre.js 文件中实例化了一个 postgresql 数据库客户端,并导出。app.js 中分别实现了增、删、改、查方法。
其中,client.query(sql, values, func) 是主要方法,参数1表示需要执行的 sql 语句,参数2表示 sql 语句中对应的值,参数3是一个回调函数,用于 sql 执行完后的回调工作。
上面执行的 sql 中,返回的 data 内容分别如下,它们都是 Result 对象:
查询列表返回的结果:
1 | Result { |
查询详情返回的结果:
1 | Result { |
执行更新操作返回的结果:
1 | Result { |
执行删除操作返回的结果:
1 | Result { |
执行添加操作返回的结果:
1 | Result { |
使用连接池连接数据库
舒勇连接池连接数据库时,postgre.js 文件的配置如下:
1 | const pg = require('pg'); |
app.js 中查询方法定义如下:
1 | function query (sql, values) { |
其余的 sql 操作代码都与使用 client 连接数据库一样。
把连接操作封装成对象
实际开发中,我们可以把数据库连接方法和增、删、改、查等操作数据库的方法封装在一个对象中,像下面这样。
postgres.js:
1 | const pg = require('pg'); |
app.js:
1 | const Koa = require('koa'); |
使用单例模式进一步优化
对于数据库连接对象,我们可以使用单例模式做进一步优化,例子如下:
postgre.js:
1 | const pg = require('pg'); |
上面的例子中,使用了一个 dbClient 属性,当 dbClient 存在时,直接返回,而不是再次连接数据库,这样节省了连接数据库所耗费的时间。