安装koa脚手架
命令行运行npm install --save koa-generator
生成koa项目
koa my-koa2
安装依赖
cd my-koa2
npm install
启动项目
npm start
数据库信息
在config文件夹新建default.js,用于配置数据库信息
const config = {
//启动端口
port: 8080,
//数据库配置
database: {
DATABASE: 'nodesql',
USERNAME: 'root',
PASSWORD: '123456',
PORT: '3306',
HOST: 'localhost'
}
}
module.exports = config;
数据库连接池
koa2需要通过驱动发送SQL命令给MySQL服务器。
目前有一些开源的驱动可以使用
mysql
可以通过npm install --save mysql2
安装
使用mysql提供的接口来查询
connection.query('SELECT * FROM users WHERE id = ?', ['123'], function(err, rows) {
if (err) {
// error
} else {
for (let row in rows) {
processRow(row);
}
}
});
mysql里面
mysql> select * from pets;
+----+--------+------------+
| id | name | birth |
+----+--------+------------+
| 1 | Gaffey | 2007-07-07 |
| 2 | Odie | 2008-08-08 |
+----+--------+------------+
2 rows in set (0.00 sec)
每一行都可以用对象表示
{
"id": 1,
"name": "Gaffey",
"birth": "2007-07-07"
}
这就是ORM
ORM
简单的讲就是对SQL查询语句的封装,让我们可以用OOP的方式操作数据库,优雅的生成安全、可维护的SQL代码。直观上,是一种Model和SQL的映射关系。
Sequelize
Sequelize是一款基于Nodejs功能强大的异步ORM框架。适合作为Nodejs后端数据库的存储接口。需要依赖mysql。
通过npm install --save sequelize
安装
Sequelize建立连接
设置一个数据库连接池,创建实例
var sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql',
pool: {
max: 5,
min: 0,
idle: 10000
},
});
定义映射关系
用sequelize.define()定义Model时,传入名称pet,默认的表名就是pets。第二个参数指定列名和数据类型,如果是主键,需要更详细地指定。第三个参数是额外的配置,我们传入{ timestamps: false }是为了关闭Sequelize的自动添加timestamp的功能。
var Pet = sequelize.define('pet', {
id: {
type: Sequelize.STRING(50),
primaryKey: true
},
name: Sequelize.STRING(100),
gender: Sequelize.BOOLEAN,
birth: Sequelize.STRING(10),
createdAt: Sequelize.BIGINT,
updatedAt: Sequelize.BIGINT,
version: Sequelize.BIGINT
}, {
timestamps: false
});
增加数据
create()方法
(async () => {
var dog = await Pet.create({
id: 'd-' + now,
name: 'Odie',
gender: false,
birth: '2008-08-08',
createdAt: now,
updatedAt: now,
version: 0
});
console.log('created: ' + JSON.stringify(dog));
})();
删除数据
destroy()方法
(async () => {
var p = await queryFromSomewhere();
await p.destroy();
})();
查询数据
findAll()方法,返回一组Model实例,可以通过JSON.stringify()序列化为字符串。
(async () => {
var pets = await Pet.findAll({
where: {
name: 'Gaffey'
}
});
console.log(`find ${pets.length} pets:`);
for (let p of pets) {
console.log(JSON.stringify(p));
}
})();
更新数据
save()方法
(async () => {
var p = await queryFromSomewhere();
p.gender = true;
p.updatedAt = Date.now();
p.version ++;
await p.save();
})();