介紹
koa是一個相對于express來說,體積更小,更富有表現力的Web框架。koa通過組合不同的generator來避免繁瑣的回調函數調用。koa的核心庫沒有綁定任何的中間件,僅僅提供了一個輕量優雅的函數庫,使得編寫Web應用變得得心應手。Koa基本上就是一個只有骨架的框架,你可以選擇(或者自己寫一個)中間件,而不用妥協于Express它們自帶的中間件。
下面是一段hello world代碼
var koa = require('koa');
var controller = require('koa-route');
var app = koa();
app.use(controller.get('/route_test',function*(){
this.set('Cache-Control','no-cache');
this.body='hello world!';
}));
app.listen(3000);
其中,
koa 是最核心的庫。
koa-route 是koa官方開發的“中間件”,用來路由設置。
app 是 koa 生成的 web 服務主程序。
使用 app.use() 注入中間件。
注冊一個路由 get 方法 訪問根目錄下的任何一個文件。
設置為不緩存。
this.body 用于控制輸出到頁面的內容。
設置監聽端口3000。
終端開啟服務器
訪問http://127.0.0.1:3000/route_test
官網依賴模塊包括:
“koa”: ,koa核心模塊
“koa-route”: 路由模塊
“koa-static”: 靜態文件加載
“koa-static-cache”: 靜態文件緩存加載
“co”:異步流
“co-fs”: 文件流
“co-body”:post JSON模塊
“co-views”: 視圖模塊
“koa-compose”:函數合并執行
“swig”: 模版引擎
“xss”:方式xss 攻擊
“mongoose”:mongo鏈接庫
例子:
app.js代碼
var koa = require('koa');
var controller = require('koa-route');
var app = koa();
var views = require('co-views');
var render = views('./view/include',{
map : { html : 'ejs'}
});
app.use(controller.get('/route_test',function*(){
this.set('Cache-Control','no-cache');
this.body='hello koa!';
}));
app.use(controller.get('/ejs_test',function*(){
this.set('Cache-Control','no-cache');
this.body = yield render('test',{title:'title_test'});
}));
app.listen(3000);
console.log('koa server is started!');
text.html代碼
<%=title%> 對title進行html轉義
終端開啟服務器
訪問http://127.0.0.1:3000/ejs_test'
<%=title%> 是對title進行html轉義
co-views 是用來渲染模板的庫,而 render 是它生成的實例
function *() {}和yield是啥?
這個其實是 Koa 的精髓所在,首先app.use(...)和controller.get(path, ...)傳入的參數都是一種寫得很像函數的東西,但不同之處是函數的寫法是function foo() {...},而這里的寫法多了一個星號,即function *foo() {}。這種寫法其實就是 ES6 里的 generator。而yield正是配合這個寫法的一種語法。
因為是新學習的知識,了解不多,目前先總結這么多,后續再總結。