koa學習筆記

2021-09-24 07:25:07 字數 3063 閱讀 9683

const koa = require('koa');

複製**

context物件表示一次會話的上下文,包含response和request.

可以控制返回給使用者的內容,例如:

const koa = require('koa');

const main = ctx => ;

複製**

koa預設返回的是text/plain。

如果想要返回其他型別,先要用ctx.request.accepts判斷一下需要什麼型別,然後用ctx.response.type指定返回型別。例如:

const main = ctx =>  else

if (ctx.request.accepts('json')) ;

} else

if (ctx.request.accepts('html')) else

};複製**

實際開發中,返回給使用者的網頁往往都寫成模板檔案。我們可以讓 koa 先讀取模板檔案,然後將這個模板返回給使用者。

const fs = require('fs');

const main = ctx => ;

複製**

原生路由:用ctx.request.path獲取使用者請求的路徑

const main = ctx =>  else 

};複製**

koa-router路由

const route = require('koa-route');

const about = ctx => ;

const main = ctx => ;

複製**

const path = require('path');

const serve = require('koa-static');

const main = serve(path.join(__dirname));

複製**

有些場合,伺服器需要重定向(redirect)訪問請求。比如,使用者登陸以後,將他重定向到登陸前的頁面。

const redirect = ctx => ;

複製**

koa 所有的功能都是通過中介軟體實現的。

每個中介軟體預設接受兩個引數,第乙個引數是 context 物件,第二個引數是next函式。只要呼叫next函式,就可以把執行權轉交給下乙個中介軟體。

多個中介軟體會形成乙個棧,先進後出。

const one = (ctx, next) => 

const two = (ctx, next) =>

const three = (ctx, next) =>

複製**

輸出結果

>> one

>> two

>> three

<< three

<< two

<< one

複製**

以上的中介軟體都是同步的,如果有非同步操作(比如讀取資料庫),中介軟體就必須寫成 async 函式。

const fs = require('fs.promised');

const koa = require('koa');

const main = async function (ctx, next) ;

複製**

const compose = require('koa-compose');

const logger = (ctx, next) =>

$$`);

next();

}const main = ctx => ;

const middlewares = compose([logger, main]);

複製**

koa 提供了ctx.throw()方法,用來丟擲錯誤。

const main = ctx => ;

複製**

處理錯誤的中介軟體

const handler = async (ctx, next) =>  catch (err) ;

}};const main = ctx => ;

//輸出 1 3 2

複製**

const main = ctx => ;

console.error('server error', err);

);複製**

const handler = async (ctx, next) =>  catch (err) 

};const main = ctx => ;

console.log('logging error ', err.message);

console.log(err);

});複製**

cookies

const main = function(ctx) 

複製**

表單

const koabody = require('koa-body');

const koa = require('koa');

const main = async function(ctx) ;

};複製**

檔案上傳

const os = require('os');

const path = require('path');

const koabody = require('koa-body');

const main = async function(ctx) ;

for (let key in files)

ctx.body = filepaths;

};複製**

koa 學習筆記

同當前炙手可熱的express一樣,它是一款更年輕的web應用框架 koa,是 express 原班人馬基於 es6 新特性重新開發的框架,主要基於co 中介軟體,框架自身不包含任何中介軟體,很多功能需要借助第三方中介軟體解決,但是由於其基於 es6 generator 特性的非同步流程控制,解決了...

Koa學習筆記 http請求處理

1.簡單處理http 中介軟體處理請求 router.js async function handlereq ctx,next module.exports 詳細request內包含的屬性可檢視 koa2 context.request 2.get請求 3.post請求 queryrequest.j...

開始學習koa

對koa已經躍躍欲試很久,恰遇koa2最近正式發布,今天嘗試著倒騰一番。所以自己對koa的學習算是從2.x開始,由於文件資源還不完全,準備踩著前輩們的肩膀,慢慢入坑。與大部分程式設計師同胞一樣樣的習慣,寫一發hello world慰藉自己孤寂的心靈。const koa require koa ctx...