一,创建
1. 依赖
- koa
- nodemon
- koa-router
- koa-parser:解析json(body)参数
- koa-multer:解析文件
- koa-static:部署静态服务器
ctx.request.url:请求地址
ctx.request.query:请求参数
ctx.request.path:路径
ctx.request.body:请求的json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const Koa = require('koa')
const app = new Koa()
app.use((ctx, next) => { console.log('中间件被执行'); ctx.response.body = "hello" })
app.listen(8000, () => { console.log('服务器启动成功'); })
|
2. 路由
开发中,将各个模块的路由文件放入router文件夹中,每个路由模块js都有自己的地址。一级一级往下走
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| ---服务器--- const Koa = require('koa') const app = new Koa() const userRouter = require('./router/user.router')
app.use(userRouter.routes())
app.use(userRouter.allowedMethods())
app.listen(8000, () => { console.log('服务器启动成功'); })
---userRouter--- const Router = require('koa-router')
const router = new Router({ prefix: "/users" })
router.put('/', (ctx, next) => { ctx.response.body = "put request" }) router.get('/', (ctx, next) => { ctx.response.body = "get request" })
module.exports = router
|
3. 参数解析
五种接收方式:
- params: /user/abc 直接带上参数
- query: /user/abc?name=lj&age=23
- json: body是json格式
- urlencoded:body是x-www-form-urlencoded格式
- form-data:body是form-data格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const router = new Router({ prefix: "/users" }) router.get('/:id', (ctx, next) => { console.log(ctx.request.params); console.log(ctx.request.query); })
const bodyParser = require('koa-bodyparser') app.use(bodyParser()) router.post('/', (ctx, next) => { console.log(ctx.request.body); ctx.response.body = "hello" })
|
4. 文件上传
multer的信息都在原生的req中,不在ctx.request中
自定义文件名和后缀名,后期学习?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| const Koa = require('koa') const bodyParser = require('koa-bodyparser') const uploadRouter = require('./router/upload.router') const app = new Koa() app.use(bodyParser()) app.use(uploadRouter.routes()) app.use(uploadRouter.allowedMethods()) app.listen(8000, () => { console.log('服务器启动成功'); })
const Router = require('koa-router') const multer = require('koa-multer') const router = new Router({ prefix: "/upload" })
const upload = multer({ dest: './uploads' })
router.post('/avatar', upload.single('avatar'), (ctx, next) => { console.log(ctx.req.file); ctx.response.body = "上传头像成功" }) module.exports = router
|
5. 数据的响应
ctx.response.status 简写 ctx.status
ctx.response.body 简写 ctx.body
6. 静态服务器
koa并没有内置部署相关的功能,所以我们需要使用第三方库koa-static
7. 错误处理方式
二,koa源码
1. 源码
2. 对比express
3. 洋葱模型