Koa2學習之旅----koa基礎
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')
})