Koa_mySQL_Ts 的整合
-
桌面新建文件夹
ts_mysql_koa
-
初始化项目:
npm init -y
-
安装一些需要的第三方模块:
npm i koa koa-router koa-bodyparser typescript mysql2
-
在
package.json
中配置脚本{ "name": "ts_mysql_koa", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "ts-node-dev ./src/app.ts" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "koa": "^2.13.4", "koa-bodyparser": "^4.3.0", "koa-router": "^10.1.1", "mysql2": "^2.3.3", "ts-node-dev": "^2.0.0", "typescript": "^4.7.4" } }
-
在根目录下新建文件夹
src
,在文件夹src
下面新建文件夹app.ts
作为入口文件。 -
搭建项目的目录结构
-
首先打开
Navicat Premium
数据库开发工具,新建数据库mall
use mall; CREATE TABLE `user` ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), `password` VARCHAR(20), nickName VARCHAR(20), age INT, birthday TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) INSERT INTO `user` SET username = 'admin',password = '123456',nickname = '张三',age = 18; INSERT INTO `user` SET username = 'lisi',password = '123456',nickname = '李四',age = 18; INSERT INTO `user` SET username = 'wangwu',password = '123456',nickname = '王五',age = 18; INSERT INTO `user` SET username = 'zhaoliu',password = '123456',nickname = '赵六',age = 18; SELECT * FROM `user`;
-
在
config
文件夹下新建db.ts
文件夹export default { host:'localhost', port:3306, user:'root', password:'123456', database:'mall' }
-
在
util
文件夹下面新建文件index.ts
(封装数据库操作语句)import {createConnection} from "mysql2"; import config from '../config/db' // 获取数据库连接 const connection = createConnection(config) export default class DBUtil { // 封装通用的数据库操作语句 static query(sql:string,params?:any|any[]|{[param:string]:any}):Promise<any>{ // 通过Promise返回操作数据库的结果 return new Promise<unknown>((resolve,reject)=>{ // 通过数据库连接执行sql语句 connection.query(sql,params,(err,result,fields)=>{ // 判断sql执行有没有错误 if(err){ // 失败 reject(err) }else { // 成功 resolve(result ) } }) }) } }
-
在
router
文件夹下面新建user.ts
import * as Router from 'koa-router' import UserService from '../service/user' const userRouter = new Router({prefix:'/user'}) const {queryAll,count,queryOne,del,save,edit} = new UserService() /** * 查询全部 */ userRouter.get('/',queryAll) /** * 查询数量 */ userRouter.get('/count',count) /** * 根据id查询 */ userRouter.get('/:id',queryOne) /** * 根据id删除 */ userRouter.delete('/:id',del) /** * 添加 */ userRouter.post('/',save) /** * 修改 */ userRouter.patch('/:id',edit) export default userRouter
-
在
service
文件夹下面新建user.ts
import UserController from '../controller/user' const {queryAll,getCount,queryOne,del,save,edit} = new UserController() export default class UserService{ /** * 查询所有 * @param ctx */ async queryAll(ctx):Promise<void>{ const {page}=ctx.query let currentPage = 1 if(page && page !='undefined') { currentPage = (page - 1) * 10 } const res = await queryAll([currentPage,10]) ctx.body = res } /** * 数量 * @param ctx */ async count(ctx):Promise<void>{ const [count] = await getCount() ctx.body = count } /** * 根据id查询 * @param ctx */ async queryOne(ctx):Promise<void>{ const {id} = ctx.params const [res] = await queryOne(id) ctx.body = res } /** * 根据id删除 * @param ctx */ async del(ctx):Promise<void>{ const {id} = ctx.params const {affectedRows} = await del([id]) ctx.body = affectedRows?'删除成功':'删除失败' } /** * 添加 * @param ctx */ async save(ctx):Promise<void>{ const body = ctx.request.body const {insertId} = await save(body) ctx.body = insertId?'添加成功':'添加失败' } /** * 修改 * @param ctx */ async edit(ctx):Promise<void>{ const body = ctx.request.body const {id} = ctx.params const {affectedRows} = await edit([body,id]) ctx.body = affectedRows?'修改成功':'修改失败' } }
-
在
controller
文件夹下面新建user.ts
import DBUtil from '../util' export default class UserController { /** * 查询全部 * @param params */ queryAll(params:any){ return DBUtil.query('select * from user limit ?,?',params) } getCount(){ return DBUtil.query('select count(*) as count from user') } /** * 根据id查询 * @param params */ queryOne(params:any){ return DBUtil.query('select * from user where id=?',params) } /** * 根据id删除 * @param params */ del(params:any){ return DBUtil.query('delete from user where id=?',params) } /** * 添加 * @param params */ save(params:any){ return DBUtil.query('insert into user set ?',params) } /** * 修改 * @param params */ edit(params:any){ return DBUtil.query('update user set ? where id=?',params) } }
-
最后根据
Postman
接口测试工具一一测试,无误