koajs--基於node.js的下一代web開發框架

Koa 是一個新的 web 框架,由 Express 幕後的原班人馬打造, 致力於成爲 web 應用和 API 開發領域中的一個更小、更富有表現力、更健壯的基石。 通過利用 async 函數,Koa 幫你丟棄回調函數,並有力地增強錯誤處理。 Koa 並沒有捆綁任何中間件, 而是提供了一套優雅的方法,幫助您快速而愉快地編寫服務端應用程序。

安裝

Koa 依賴 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
$ nvm install 7
$ npm i koa
$ node my-koa-app.js

創建一個簡單應用

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

這樣,一個簡單的koa應用就創建好了。運行文件,訪問3000端口,就可以看到“Hello World”.

級聯

與之前的express不同,koa的中間件採用級聯的方式,使用async功能,我們可以實現 “真實” 的中間件。對比 Connect 的實現,通過一系列功能直接傳遞控制,直到一個返回,Koa 調用“下游”,然後控制流回“上游”。

下面採用官方文檔的例子,來看一下級聯的方式:

const Koa = require('koa');
const app = new Koa();

// logger

app.use(async (ctx, next) => {
  await next();
  const rt = ctx.response.get('X-Response-Time');
  console.log(`${ctx.method} ${ctx.url} - ${rt}`);
});

// x-response-time

app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  ctx.set('X-Response-Time', `${ms}ms`);
});

// response

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);
當請求開始時首先請求流通過 x-response-time 和 logging 中間件,然後繼續移交控制給 response 中間件。當一箇中間件調用 next() 則該函數暫停並將控制傳遞給定義的下一個中間件。當在下游沒有更多的中間件執行後,堆棧將展開並且每個中間件恢復執行其上游行爲。

端口監聽

koa的監聽端口不唯一,可以將同一個應用程序同時作爲 HTTP 和 HTTPS 或多個地址:
const http = require('http');
const https = require('https');
const Koa = require('koa');
const app = new Koa();
http.createServer(app.callback()).listen(3000);
https.createServer(app.callback()).listen(3001);

context

Context 將 node 的 request 和 response 對象封裝到單個對象中,爲編寫 Web 應用程序和 API 提供了許多有用的方法。 這些操作在 HTTP 服務器開發中頻繁使用,它們被添加到此級別而不是更高級別的框架,這將強制中間件重新實現此通用功能。
每個 請求都將創建一個 Context,並在中間件中作爲接收器引用,或者 ctx 標識符,如以下代碼片段所示:
app.use(async ctx => {
  ctx; // 這是 Context
  ctx.request; // 這是 koa Request
  ctx.response; // 這是 koa Response
});

爲方便起見許多上下文的訪問器和方法直接委託給它們的 ctx.request或 ctx.response ,不然的話它們是相同的。 例如 ctx.type 和 ctx.length 委託給 response 對象,ctx.path 和 ctx.method 委託給 request。

路由

可以使用koa-router

安裝

npm install koa-router

看下面一個使用的例子:

const Koa = require('koa')
// 注意 require('koa-router') 返回的是函數:
const router = require('koa-router')()
const app = new Koa()

 // 添加路由
 router.get('/', async (ctx, next) => {
    ctx.response.body = '<h1>index page</h1>'
})

router.get('/home', async (ctx, next) => {
    ctx.response.body = '<h1>HOME page</h1>'
})

router.get('/404', async (ctx, next) => {
    ctx.response.body = '<h1>404 Not Found</h1>'
})

 // 調用路由中間件
 app.use(router.routes())

app.listen(3000, ()=>{
  console.log('server is running at http://localhost:3000')
})

重定向

router.redirect('/login', 'sign-in');

動態路由

router.get('/users/:id', (ctx, next) => {
 // ...
});

這個和vue-router很類似的,這樣就可傳遞參數了,如:user/888

靜態資源

當我們要訪問靜態資源時,這個可以使用 koa-static這個模塊。

安裝

npm install koa-static

例子如下:

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();
 
// $ GET /package.json
app.use(serve('.'));
 
// $ GET /hello.txt
app.use(serve('test/fixtures'));
 
// or use absolute paths
app.use(serve(__dirname + '/test/fixtures'));
 
app.listen(3000);
 
console.log('listening on port 3000');
好了,簡單的koa搭建一個we服務就這樣搭建了好了,有任何疑問歡迎留言。
參考:
koa開發文檔
koa框架教程-阮一峯的網絡日誌
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章