koa中使用mysql增删改_使用Koa搭建服务端程序API - Mysql操作(三)

在这篇文章开始讲述如何使用sequelize来进行Mysql数据库的操作

数据库配置

在conf下新建一个db.js作为数据库的配置文件,关于数据的账号和密码都放在这个文件中管理。

conf/db.js

const MYSQL_CONF = {

host: "localhost",

user: "qieyiqiyu",

password: "ceshi",

port: "3306",

database: "qieyiqiqu"

};

module.exports = MYSQL_CONF;

复制代码

使用sequelize连接数据库

const Sequelize = require('sequelize')

const  MYSQL_CONF  = require('../conf/db')

const { host, user, password, database } = MYSQL_CONF

const conf = {

host,

dialect: 'mysql',//指定数据库是mysql

}

//实例化Sequelize传入数据库、姓名、密码、配置

const seq = new Sequelize(database, user, password, conf)

//导出Sequelize实例

module.exports = seq

复制代码

使用sequelize定义数据模型

在db文件夹下新建一个model文件夹存放数据表的模型

定义用户表的数据模型

db/model/User.js

const seq = require("../seq");

const Sequelize = require('sequelize')

// users

const User = seq.define("user", {

userName: {

type: Sequelize.STRING,

allowNull: false,

unique: true,

comment: "用户名,唯一"

},

password: {

type: Sequelize.STRING,

allowNull: false,

comment: "密码"

},

picture: {

type: Sequelize.STRING,

comment: "头像,图片地址",

defaultValue: "https://zhangnl.cn"

}

});

module.exports = User;

复制代码

定义模型使用define定义 名字user在数据库里面的表名就是users,是复数。

表结构是一个对象,对象的key就是字段名字,value就是字段的设置

type是字段的类型有STRING,TEXT,INTEGER,JSON...

unique唯一

allowNull是否为空

defaultValue默认值

comment注释说明

sequelize会自动创建ID为主键自增,自动创建createAt和updateAt为插入时间和修改时间

使用sequelize同步数据模型

在db下新建sync.js

const seq = require('./seq')

require('./model/User')

// 测试连接

seq.authenticate().then(() => {

console.log('auth ok')

}).catch(() => {

console.log('auth err')

})

// 执行同步

seq.sync({ force: true }).then(() => {

console.log('sync ok')

process.exit()

})

复制代码

现在数据里边就有了users表

是这个样子滴👇👇👇

96cdd8d4bb160def03fba6813fa82bdd.png

使用sequelize增删改查

model里面的数据模型 提供了sequelize提供的许多许多的API

插入数据

创建数据使用create,接收一个Object

controller/user.js

async function create(ctx){

let { userName, password } = ctx.request.body

let data = await User.create({

userName,

password,

})

ctx.body = data

}

复制代码

是这样发送请求的👇👇👇

4e0e0ef26d1adcd3f67b3073d3d0ce54.png

数据表中有了一条数据👇👇👇

4158fac3918be66d4d47541156a0c0a3.png

b2c8a35ebd68a207a7968cd9eeb541f4.png

修改数据

创建数据使用update,接收两个Object,第一个是数据,第二个是options。where是条件

controller/user.js

async function update(ctx){

let data = await User.update(ctx.request.body, {

//where也是一个对象  可以有多个条件

where: {

id: ctx.params.id, //修改id为传过来的id的用户

},

})

ctx.body = data

}

复制代码

是这样发送请求的👇👇👇

ff9a4cd94f63b6db16b86bb6c3393d57.png

现在数据表中是这样子的👇👇👇

6cb0928fc1b40502a5f319fbfd25320a.png

976fb262f3fbbf389d202f5bd744d6bf.gif

查找数据

查找一个数据

查找一个数据使用findOne,接收一个Object。attributes是需要查找的属性。

controller/user.js

async function getUserInfo(ctx){

let data = await User.findOne({

attributes: ['userName', 'picture'],

where: {

id: ctx.params.id,

},

})

ctx.body = data

}

复制代码

是这样发送请求的👇👇👇

5e57d637b20a8917c2b3bdacc8deab6b.png

查找多条数据

使用findAll。

多弄几条用户,以便于查找操作

782bff952bfd88fc8a7c6de9def22d94.png

controller/user.js新增加一个getUsers方法

async function getUsers(ctx){

let data = await User.findAll({

attributes: ['userName', 'picture'],

//查找条数

limit: 4,

//偏移量  隔几条

offset: 0,

//查询条件,也可以不写查询条件

where: {

picture: 'https://zhangnl.cn',

},

})

ctx.body = data

}

复制代码

话不多说看图

65297ec3f7b508466e179bbae34dd1e8.png

分页查询

使用findAndCountAll。

controller/user.js

async function getUsers(ctx){

const { limit, page } = ctx.query

let data = await User.findAndCountAll({

limit: limit * page, //查找的条数

offset: limit * (page - 1), //把上一页的偏移出去

//order 一个数组 可以放多个数组条件  [字段,排序方式]

order: [['id', 'DESC']], //排序  以创建时间排序倒序

})

// 格式化数据

let list = data.rows.map(row => row.dataValues)

// 返回数据

ctx.body = {

count: data.count,

data: list,

}

}

复制代码

看图说话

af0c5829e1bec44b8b6dbb64956b86f8.png

查找返回的有一个count是总数

rows是一个数组 user里面的dataValues就是我们需要的用户信息

b7334f00fe8a7f220995ca820604db9c.png

删除数据

6e7a3e014979ab5390c25b2b4e33c9df.gif

一般情况我们是不会删除数据库里面的信息的。会更改一个状态值来确定是否被删除。

d48b53a5f5e9ff8018e20519a01780b0.png

controller/user.js新增加一个deleteUser方法

async function deleteUser(ctx){

let data = User.destroy({

where: {

id: ctx.params.id,

},

})

ctx.body = data

}

复制代码

routes/user.js现在是这个样子滴

const router = require('koa-router')()

//给当前路由统一增加前缀

router.prefix('/v1/users')

//引入控制器里面的方法

const {

update,

create,

getUserInfo,

getUsers,

deleteUser,

} = require('../controller/user')

//增加一个user

router.post('/', create)

//修改user

router.patch('/:id', update)

//获取user信息

router.get('/:id', getUserInfo)

//获取users

router.get('/', getUsers)

//删除user

router.delete('/:id', deleteUser)

module.exports = router

复制代码

803dac88ae89d616fd44c5c114c9d526.png

8741dab84d15dbd442eef74d8cd6986d.png

到此就简单的学习了sequelize对mysql的简单的增删改查。能力有限,博各位大佬一笑。

2478d7a62b76f50bb159a07021b239f1.png

最后,本人公众号

6cc8ab0a823e64553ab855b111a01ee9.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是手把手带你搭建koa2 mysql项目的教程。 1. 安装Node.js和npm 首先需要安装Node.js和npm,可以在官网下载安装包进行安装。 2. 初始化项目 在命令行进入项目目录,运行以下命令初始化项目: ``` npm init ``` 根据提示填项目信息,完成后会生成package.json文件。 3. 安装koa2和koa-router 运行以下命令安装koa2和koa-router: ``` npm install koa koa-router --save ``` 4. 安装mysql模块 运行以下命令安装mysql模块: ``` npm install mysql --save ``` 5. 创建数据库 在mysql创建一个名为test的数据库,并创建一个名为users的表,包含id、name、age个字段。 6. 创建连接池 在项目创建一个db.js文件,用于创建mysql连接池: ```javascript const mysql = require('mysql'); const pool = mysql.createPool({ host: 'localhost', user: 'root', password: '123456', database: 'test' }); module.exports = pool; ``` 7. 创建路由 在项目创建一个router.js文件,用于创建koa-router路由: ```javascript const Router = require('koa-router'); const pool = require('./db'); const router = new Router(); router.get('/users', async (ctx) => { const conn = await pool.getConnection(); const [rows] = await conn.query('SELECT * FROM users'); conn.release(); ctx.body = rows; }); module.exports = router; ``` 8. 创建服务器 在项目创建一个app.js文件,用于创建koa2服务器并引入路由: ```javascript const Koa = require('koa'); const router = require('./router'); const app = new Koa(); app.use(router.routes()); app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 9. 运行项目 在命令行进入项目目录,运行以下命令启动服务器: ``` node app.js ``` 在浏览器访问http://localhost:3000/users,可以看到数据库的用户数据。 至此,一个简单的koa2 mysql项目就搭建完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值