koa-template

Koa开发出来的一个精简模板

MIT License

Stars
5

koa2 Restful API koa

:

  1. koa koa
  2. mongodb mongoose mongdbmongoose

:

    • token
    • token payload
    • token

# clone
git clone https://github.com/251205668/koa-template

# install dependencies
npm install

# install nodemon
npm install -g nodemon 

  1. mongodb , mongodb

  2. config/Mongoose.js mongodb

  3. app.js config/config.js baseUrl

npm run dev
  1. postman

vscode

  1. .launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "",
      "program": "${workspaceFolder}/app.js"
    }
  ]
}

  1. F5,

**1. **

models user.js

const Mongoose = require('../config/Mongoose')

// userSchema
const Schema = Mongoose.Schema
const UserSchema = new Schema({
  username: {
    type: String,
    unique: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
})

module.exports = Mongoose.model('User', UserSchema)

**2. controller **

,

class UserController {
  constructor() {}
  // 
  async register(ctx, next) {
  }
}
module.exports = new UserController()

validator/validator.js

validator.js validator ,``````

class RegisterValidator extends LinValidator {
  constructor() {
    super()
    this.username = [
      new Rule('isLength', '320', {
        min: 3,
        max: 20,
      }),
    ]
    this.repassword = [
      new Rule('matches', '', /^[A-Za-z0-9]+$/),
    ]
    this.password = [
      new Rule('matches', '', /^[A-Za-z0-9]+$/),
    ]
  }
}
module.exports = { RegisterValidator }
class UserController {
  constructor() {}
  // 
  async register(ctx, next) {
    //  validator.js
    const v = await new RegisterValidator().validate(ctx)
    // 
    /**
     * query  : v.data.query
     * body   :  v.data.body
     * param  :  v.data.path
     * */
    const payload = v.data.body || {}
  }
}

**2. Service **

const bcrypt = require('bcryptjs')
class UserService {
  constructor() {}
  // 
  async register(payload) {
    // 
    const user = await User.findOne({ username: payload.username })
    let comparePassword = payload.password === payload.repassword
    if (user) {
      throw new AllReadyExistedException('')
    }
    if (!comparePassword) {
      throw new ParameterException('')
    }
    // 
    else {
      //  10
      const sault = bcrypt.genSaltSync(10)
      payload.password = bcrypt.hashSync(payload.password, sault)
      return await User.create(payload)
    }
  }
}

**3. Controller **

class UserController {
  constructor() {}
  async register(ctx, next) {
    const v = await new RegisterValidator().validate(ctx)
    const payload = v.data.body || {}
    const res = await userService.register(payload)
    if (res) {
      ctx.body = successResponse('')
    }
  }
}
module.exports = new UserController()

**4. Router **

api/routes user,js

const Router = require('koa-router')
const router = new Router({
  // 
  prefix: '/user'
})
// controller
const UserController = require('../../controller/user')
// 
router.post('/register',UserController.register)
module.exports = router

5. JWT

JWT app.js

app.use(JWT({ secret: config.JWT_SECRET })
.unless({ path: [/^\/user\/register/] }))

koa-template
 api
    router.js  // 
    routes
        admin.js
        upload.js
        user.js
 app.js         // 
 config         // 
    config.js
    Mongoose.js 
 controller     // controller
    admin.js
    upload.js
    user.js
 core           // 
    http-execption.js
    lin-validator-v2.js
    success.js
    util.js
 HttpCode.md    // 
 LICENSE
 middlewares    // 
    execption.js
 models         // 
    attachment.js
    user.js
 package.json
 README.md
 services       // service
    adminService.js
    uploadService.js
    userService.js
 static         // 
    2021-04-10
       10098411-77ab-4d27-a77c-002fac24717a.png
       73ef83fc-31b7-4420-b4c0-3ff5478147ea.png
    test.png
 util
    token.js
 validator     // 
     validator.js

TODO

  • swagger
  • oss
  • sequelize koa
  • TypeScript
  • nestjs

Pull Request

License

MIT