import Koa from 'koa'
const hostname = "127.0.0.1" //服务器监听的ip地址
const port = 8008 //服务器监听的端口号
/*
实例化一个 Koa 对象
实例化是指根据一个类创建具体对象的过程
*/
const app = new Koa()
/*
app.use() 方法用于注册中间件
中间件是处理 http 请求和响应的函数
当一个请求到达服务器时, 会从第一个中间件开始执行, 直到最后一个中间件
上下文对象 ctx(context) 包含了与当前 http 请求相关的所有信息
如: http方法、url、请求头、请求体、查询参数等
*/
app.use(async (ctx,next) => {
console.log(1)
await next() //若中间件调用了next(),会暂停当前中间件的执行,将控制权传递给下一个中间件
console.log(2)
})
app.use(async (ctx,next) => {
console.log(3)
await next()
console.log(4)
})
//当中间件没有再调用next(),则不需要再将控制权传递给下一个中间件,控制权会按照相反的顺序执行
app.use(async (ctx,next) => {
console.log(5)
ctx.body = "dengruicode.com" // 使用 ctx.body 设置响应体的内容
})
//启动 http 服务器, 并在指定的ip地址(127.0.0.1)和端口(8008)上监听连接请求
app.listen(port, hostname, () => {
console.log(`服务器已启动: http://${hostname}:${port}`)
})
洋葱模型
当你处理一个请求时,
可以想象成是在"剥洋葱",从外向内一层一层地往里剥,直到剥到中心部分
这个过程涉及对请求的多个层面进行解析、验证、处理
在处理完洋葱(请求)后,
构建响应的过程就像是从精心准备的食材(处理请求后得到的数据)开始,
从内向外逐层添加调料(格式化、封装等),最终形成一道色香味俱佳的菜肴(响应)