koa2+MySQL搭建

搭建koa2项目

安装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();
})();

你可能感兴趣的:(node.js)