1黑滴、首先我們要先安裝node.js v7.6.0以上,因?yàn)閚ode.js v7.6.0開始完全支持async/await紧索,不需要加flag袁辈,所以node.js環(huán)境都要7.6.0以上
2、npm 版本3.x以上
接下來我們就開始了珠漂。
#首先初始化package.json
npm init
#安裝koa2
npm install koa
然后我們先寫個小demo測試下有沒有安裝成功,創(chuàng)建一個index.js文件
然后輸入命令:node app.js
這樣就證明安裝成功了晚缩。
由于koa2是基于async/await操作中間件,目前node.js 7.x的harmony模式下才能使用媳危,所以啟動的時的腳本
先復(fù)制以下這段代碼荞彼,在粘貼在chrome的控制臺console中,按回車鍵執(zhí)行:
function getSyncTime() {
? return new Promise((resolve, reject) => {
? ? try {
? ? ? let startTime = new Date().getTime()
? ? ? setTimeout(() => {
? ? ? ? let endTime = new Date().getTime()
? ? ? ? let data = endTime - startTime
? ? ? ? resolve( data )
? ? ? }, 500)
? ? } catch ( err ) {
? ? ? reject( err )
? ? }
? })
}
async function getSyncData() {
? let time = await getSyncTime()
? let data = `endTime - startTime = ${time}`
? return data
}
async function getData() {
? let data = await getSyncData()
? console.log( data )
}
getData()
在上面可以看出我們可以讓異步的邏輯用同步方法實(shí)現(xiàn)
await返回的是一個promise對象
可以通過多層 async function 的同步寫法代替?zhèn)鹘y(tǒng)的callback嵌套
簡析koa2源碼結(jié)構(gòu)
1卿泽、application.js 是整個koa2 的入口文件,封裝了context,request签夭,response齐邦,以及最核心的中間件處理流程。
2第租、context.js 處理應(yīng)用上下文措拇,里面直接封裝部分request.js和response.js的方法
3、request.js 處理http請求
4慎宾、response.js 處理http響應(yīng)
koa2的特性
1丐吓、只提供封裝好http上下文、請求趟据、響應(yīng)券犁,以及基于async/await的中間件容器。
2汹碱、利用ES7的async/await來處理傳統(tǒng)回調(diào)嵌套問題和代替koa@1的generator粘衬,但是需要在node.js 7.x的harmony模式下才能支持async/await。
3咳促、中間件只支持?async/await?封裝的稚新,如果要使用koa@1基于generator中間件,需要通過中間件koa-convert封裝一下才能使用
koa中間件開發(fā)和使用
1跪腹、koa v1和v2中使用到的中間件的開發(fā)和使用
2褂删、generator 中間件開發(fā)在koa v1和v2中使用
3、async await 中間件開發(fā)和只能在koa v2中使用
generator中間件開發(fā)
generator中間件返回的應(yīng)該是function * () 函數(shù)
function log( ctx ) {
? ? console.log( ctx.method, ctx.header.host + ctx.url )
}
module.exports = function () {
? ? return function * ( next ) {
? ? ? ? // 執(zhí)行中間件的操作
? ? ? ? log( this )
? ? ? ? if ( next ) {
? ? ? ? ? ? yield next
? ? ? ? }
? ? }
}
generator中間件在koa@1中的使用
generator 中間件在koa v1中可以直接use使用
新建個文件夾
mideleware
然后新建個logger-generator.js文件
/* ./middleware/logger-generator.js */
function log( ctx ) {
? ? console.log( ctx.method, ctx.header.host + ctx.url )
}
module.exports = function () {
? ? return function * ( next ) {
? ? ? ? // 執(zhí)行中間件的操作
? ? ? ? log( this )
? ? ? ? if ( next ) {
? ? ? ? ? ? yield next
? ? ? ? }
? ? }
}
然后index.js這樣寫:
然后執(zhí)行 node index.js? 然后就啟動了冲茸,使用的是koa@1的中間件很簡單吧
注意這里要想試一試的話就把koa版本改為
要記得改回來咱們這里學(xué)習(xí)的是koa2
generator中間件在koa@2中的使用
generator 中間件在koa v2中需要用koa-convert封裝一下才能使用
const Koa = require('koa') // koa v2
const loggerAsync? = require('./middleware/logger-async')
const app = new Koa()
app.use(loggerAsync())? // 這樣才可以使用
app.use(( ctx ) => {
? ? ctx.body = 'hello world!'
})
app.listen(3000)
console.log('the server is starting at port 3000')