一.项目的初始化

1 npm 初始化

npm init -y

​ 生成package.json 文件

2 git 初始化

 git init

生成.git 隐藏文件夹 git的本地仓库

3 创建Readme.md文件

二.搭建项目

1.安装Koa框架

npm install Koa --save

2.编写最基本的app

创建 src/main.js

const Koa =require('koa')
const app =new Koa()
app.use((ctx,next)=>{
 ctx.body='hello api'
})
app.listen(3000,()=>{
  console.log('server running  on http://localhost:3000')
})

3.测试

http://localhost:3000

三.项目优化

1.自动重启服务

安装nodemon工具

 npm install nodemon --save

编写package脚本在package.json 里面

"scripts": {
   "dev": "nodemon ./src/main.js",
   "test": "echo \"Error: no test specified\" && exit 1"
  
 }

1.读取配置文件

安装dotenv,读取根目录.env文件,将配置写到pross.env

npm install dotenv --save

创建.env 文件

APP_PORT=8000 

创建src/config/config.default.js

const dotenv =require('dotenv')
dotenv.config()
module.exports=process.env

改写main.js

// 项目入口文件
const Koa =require('koa')

// 读到配置的端口  解构赋值将里面的APP_PORT结构出来
const {APP_PORT}=require('./config/config.default')

const app =new Koa()

app.use((ctx,next)=>{
  ctx.body='hello api'
})

app.listen(APP_PORT,()=>{
    console.log(`server running  on http://localhost:${APP_PORT}`)
})

四.添加路由

路由:根据不同的URL,调用对象处理函数

1.安装Koa-route

npm install koa-router --save

步骤:

1.导入包

2.实例化对象

3.编写路由

4.注册中间件

const Router=require('koa-router')
const router =new Router()
router.get('/',(ctx,next)=>{
  ctx.body="users"
})
app.use(router.routes())

2.拆分文件夹编写路由

const Router=require('koa-router')
const router =new Router({prefix:'/users'})
router.get('/',(ctx,next)=>{
  ctx.body="users"
})

3.改写main.js

const Koa =require('koa')
const {APP_PORT}=require('./config/config.default')
const app =new Koa()
const usersRouter=require('./router/use.routes')
app.use(usersRouter.routes())
app.listen(APP_PORT,()=>{
  console.log(`server running  on http://localhost:${APP_PORT}`)
})

五.目录结构优化

1将http服务和app业务拆分

创建src/app/index.jx

const Koa =require('koa')
const app =new Koa()
const usersRouter=require('../router/use.routes')
app.use(usersRouter.routes())
module.exports=app

改写main.js

const {APP_PORT}=require('./config/config.default')
const app = require('./app/index')
app.listen(APP_PORT,()=>{
    console.log(`server running  on http://localhost:${APP_PORT}`)
})

2将路由里面业务拆分出去

路由:解析URL,分布给控制器对应的方法

1.创建src/controller/user.controller.js

2.拆分业务

class UseController {
    async register(ctx,next){
    ctx.body='注册成功'
    }

    async login(ctx,next){
        ctx.body='登录成功'
    }
}
module.exports=new UseController()   // 导出的是一个实例化对象
const Router=require('koa-router')
const {register,login}=require('../controller/use.controller')
const router =new Router({prefix:'/users'})
// router.get('/register',(ctx,next)=>{
// 将(ctx,next)=>{}拆分出去
// })
router.get('/register',register)   // router.post('/',(ctx,next)=>{})  将()=>拆分出去
router.get('/login',login)
module.exports=router

六.解析BODY

1.安装koa-body

npm install koa-body --save

2.注册中间件

改写app/index.js

const KoaBody=require('koa-body')
const app =new Koa()
const usersRouter=require('../router/use.routes')
app.use(KoaBody())
// 所有的路由处理之前
app.use(usersRouter.routes())
module.exports=app

3.解析请求数据

改写user.controller.js

const {createUser} =require('../service/user.service')
class UseController {
    async register(ctx,next){
        // 1. 获取数据
        // console.log(ctx.request.body)
        const {user_name,password}=ctx.request.body
        // 2. 操作数据库
        const res =await createUser(user_name,password)
        console.log(res)
        // 3. 还回结果
        ctx.body=ctx.request.body
    }

    async login(ctx,next){
        ctx.body=ctx.request.body
    }
}
module.exports=new UseController()   // 导出的是一个实例化对象

4拆分数据库层

创建servers层

class UserService{
    // 操作数据库
    async createUser(user_name,password){
      return '写入数据库成功'
    }
}
module.exports=new UserService()

git log --oneline

七.数据库操作

sequelize ORM数据库工具

ORM :对象关系映射

  • 数据表映射(对应)一个类
  • 数据表中的数据行(记录)对应一个对象
  • 数据表字段对应对象的属性
  • 数据表的操作对应对象的方法

1.安装 sequelize

npm install sequelize --save

2.安装 myql2

npm install mysql2 --save

3.连接数据库

创建src/db/seq.js

const { Sequelize } = require('sequelize')
const {
    MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PWD, MYSQL_DB
} = require('../config/config.default')
const seq = new Sequelize(MYSQL_DB, MYSQL_USER, MYSQL_PWD, {
    MYSQL_HOST: MYSQL_HOST,
    dialect: 'mysql',
})
// seq.authenticate().then(()=>{
//     console.log('数据库连接成功')
// }).catch(
//     ()=>{
//         console.log('失败')
//     }
// )
module.exports = seq

4.编写配置文件

APP_PORT= 3000
MYSQL_HOST= locahost
MYSQL_PORT= 3306
MYSQL_USER = root
MYSQL_PWD = 123456
MYSQL_DB= zdsc

八sequelize

sequelize主要通过Model对应数据表

创建src/model/user.model.js

const {DataTypes} =require('sequelize')

const seq =require('../db/seq')

//创建模型 (Model zd_user->zd_users)
const User = seq.define('zd_user',{
    // id 会被sequeliza自动创建,管理
    user_name:{
        type:DataTypes.STRING,
        allowNull:false,  
        unique:true,
        common:'用户名,唯一'
    },
      password:{
          type:DataTypes.CHAR(64),
          allowNull:false,
          common:'密码'
      },
      is_admin:{
          type:DataTypes.BOOLEAN,
          allowNull:false,
          defaultValue:0,
          comment:"是否为管理员,0是管理员,1不是管理员"
      }
})


// User.sync({force:true})  //强制同步数据库,创建数据表

module.exports=User

github地址 https://gitee.com/sun-jiwen/study-koa.git 里面有权限,登录 ,修改密码等等后期会持续添加,记得用try catch 捕获异常

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐