1. 程式人生 > >Koa2學習之旅----koa基礎

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() 得到的例項物件,儲存了應用全域性狀態以及其他物件,後面的ContextReqeustResponse物件都是該物件下的子物件

  - .listen()

  - .use(callback)

中介軟體

  - .use(callback)

  - callback(context, next)

  - context 物件

  每一次請求都會包裝一個context物件

  - next

  每一箇中間件都是一個迭代器

  - 非同步中介軟體

  .use(async callback)

 

錯誤處理

  - app.on('error', err => {})

 

context 物件

  每一次請求都會包裝一個 context 物件

  該物件對 node request response 物件進行了封裝(加強了node中的requestresponse

  同時提供了其他一些有用的 api

  koa 會把 context 傳入到中介軟體函式的第一個引數中

  可以對context進行擴充套件,並在中介軟體中使用

 

 

context 物件

  - .reqNode request 物件

  - .resNode response 物件

  注意:在 Koa 中儘量使用Koa提供的封裝物件

  - .requestKoa request 物件

  - .responseKoa 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')
})