Koa开发出来的一个精简模板
MIT License
koa2
Restful API koa
:
# clone
git clone https://github.com/251205668/koa-template
# install dependencies
npm install
# install nodemon
npm install -g nodemon
mongodb
, mongodb
config/Mongoose.js
mongodb
app.js
config/config.js
baseUrl
npm run dev
postman
vscode
.launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "",
"program": "${workspaceFolder}/app.js"
}
]
}
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
oss
sequelize
koaTypeScript
nestjs