npm i koa
服务器启动文件
const Koa = require('koa');
// 热重载: supervisor
npm i -g supervisor
// npm i supervisor
supervisor app.js
客户端从发请求到看到内容
服务器:接收到请求(request)-> 处理请求,生成数据 -> 发送数据(response)
Koa: request -> middleware -> response
koa处理了request和response,我们需要做的是注册(编写)middleware
const Koa = require('koa')
const app = new Koa()
app.use((ctx, next) => {
ctx.body = '<strong />koa'
next()
})
app.listen(8080, () => {
console.log('app is runing 8080')
})
Application
当前应用程序对象,即 new Koa() 得到的实例对象,保存了应用全局状态以及其他对象,后面的Context、Reqeust、Response对象都是该对象下的子对象
- .listen()
- .use(callback)
中间件
- .use(callback)
- callback(context, next)
- context 对象
每一次请求都会包装一个context对象
- next
每一个中间件都是一个迭代器
- 异步中间件
.use(async callback)
错误处理
- app.on('error', err => {})
context 对象
每一次请求都会包装一个 context 对象
该对象对 node 的 request 和 response 对象进行了封装(加强了node中的request和response)
同时提供了其他一些有用的 api
koa 会把 context 传入到中间件函数的第一个参数中
可以对context进行扩展,并在中间件中使用
context 对象
- .req:Node 的 request 对象
- .res:Node 的 response 对象
注意:在 Koa 中尽量使用Koa提供的封装对象
- .request:Koa 的 request 对象
- .response:Koa 的 response 对象
- .state:用户数据存储空间
- .app:当前应用程序实例 - Application 对象
======================================================================
const Koa = require('koa')
const app = new Koa()
app.use((ctx, next) => {
ctx.body = '<strong />koa'
next()
})
app.use((ctx, next) => {
let n = Math.random()
// ctx.n = n
ctx.state.n = n
next()
})
app.use((ctx, next) => {
// 不推荐这种直接取上个中间件值的做法,虽然可以取得到
// console.log(ctx.n)
// 而应该用这种命名空间的写法
console.log(ctx.state.n)
})
app.listen(8080, () => {
console.log('app is runing 8080')
})
const Koa = require('koa')
const app = new Koa()
app.use((ctx, next) => {
ctx.body = '<strong />koa'
next()
})
app.use((ctx, next) => {
let n = Math.random()
ctx.n = n
next()
})
app.use((ctx, next) => {
// 不推荐这种直接取上个中间件值的做法,虽然可以取得到
console.log(ctx.n)
})
app.listen(8080, () => {
console.log('app is runing 8080')
})