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...