Koa 正在等一個人

50
Koa 正在等一個人 Koa Is Just Waiting For You Fred Chien

Transcript of Koa 正在等一個人

Page 1: Koa 正在等一個人

Koa 正在等一個人

Koa Is Just Waiting For You

Fred Chien

Page 2: Koa 正在等一個人

Fred Chien錢逢祥

Page 3: Koa 正在等一個人

cfsghostAt Github

Page 4: Koa 正在等一個人

fred-zoneblogspot.com

Page 5: Koa 正在等一個人

Open Source Developer

Page 6: Koa 正在等一個人

HanGee蕃薯哥

Page 7: Koa 正在等一個人

HanGee蕃薯哥

Page 8: Koa 正在等一個人

Koa?苦啊?

Page 9: Koa 正在等一個人

討論 Koa 之前

Page 10: Koa 正在等一個人

最近什麼最潮

Page 11: Koa 正在等一個人

Node.js v.s. io.js0.12 的搶先釋出大戰

Page 12: Koa 正在等一個人

ECMAScript 6Generator

Page 13: Koa 正在等一個人

Node.js 0.11.9+Generator

Page 14: Koa 正在等一個人

使用 ES6 的方法

node --harmony

Page 15: Koa 正在等一個人
Page 16: Koa 正在等一個人

初入 GeneratorHow to write a generator?

Page 17: Koa 正在等一個人

Generator 的使用流程

1. 宣告 Generator 函數2. 建立 Generator 物件3. 執行 Generator 內部流程

Page 18: Koa 正在等一個人

Generator 的使用方法

function* myGenerator() { console.log('My Generator!');}

var generator = myGenerator();generator.next();

Page 19: Koa 正在等一個人

設計流程

With Generator

Page 20: Koa 正在等一個人

Generator 的基本流程設計

function* myGenerator() { console.log('My Generator!'); yield console.log('My Generator! Again!'); yield console.log('My Generator! Again! Again!');}

Page 21: Koa 正在等一個人

Generator 的回傳與代入值

function* myGenerator() {

console.log('My Generator!');

yield

console.log('My Generator! Again!' );

var input = yield 123;

console.log(input);

}

var generator = myGenerator();

generator.next();

var ret123 = generator.next();

console.log(ret123);

generator.next(':-D');

Page 22: Koa 正在等一個人

Generator 的回傳與代入值

function* myGenerator() {

console.log('My Generator!');

yield

console.log('My Generator! Again!' );

var input = yield 123;

console.log(input);

}

var generator = myGenerator();

generator.next();

var ret123 = generator.next();

console.log(ret123);

generator.next(':-D');

Page 23: Koa 正在等一個人

Generator 的回傳與代入值

function* myGenerator() {

console.log('My Generator!');

yield

console.log('My Generator! Again!' );

var input = yield 123;

console.log(input);

}

var generator = myGenerator();

generator.next();

var ret123 = generator.next();

console.log(ret123);

generator.next(':-D');

想像這是 setImediate() setTimeout()

Page 24: Koa 正在等一個人

長得 Sync 樣卻有 Async 骨

Generator

Page 25: Koa 正在等一個人
Page 26: Koa 正在等一個人

Koa 起手式

npm install koa

Page 27: Koa 正在等一個人

First Examplevar koa = require('koa');

// 建立一個網站伺服器

var app = koa();

// 當有瀏覽器要求頁面時,進行處理

app.use(function *() {

// 回應文字內容給瀏覽器

this.body = 'My First Koa Web' ;

});

// 監聽 3000

app.listen(3000);

Page 28: Koa 正在等一個人
Page 29: Koa 正在等一個人

Routingnpm install koa-route

Page 30: Koa 正在等一個人

Routingvar koa = require('koa');

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

// 建立一個網站伺服器

var app = koa();

// 當有瀏覽器要求 /test 頁面時,進行處理

app.use(route.get( '/test', function *() {

// 回應文字內容給瀏覽器

this.body = 'Testing Page!';

}));

// 監聽 3000

app.listen(3000);

Page 31: Koa 正在等一個人
Page 32: Koa 正在等一個人

Data TransferQuery String, body, parameters

Page 33: Koa 正在等一個人

Query Stringvar koa = require('koa');

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

// 建立一個網站伺服器

var app = koa();

// 當有瀏覽器要求 /test 頁面時,進行處理

app.use(route.get( '/test', function *() {

// 回應 Query String 的 hackathon 欄位內容給瀏覽器

this.body = this.query.hackathon;

}));

// 監聽 3000

app.listen(3000);

Page 34: Koa 正在等一個人

Body Parsernpm install koa-bodyparser

Page 35: Koa 正在等一個人

Bodyvar koa = require('koa');

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

var bodyParser = require('koa-bodyparser');

// 建立一個網站伺服器

var app = koa();

app.use(bodyParser());

// 當有瀏覽器使用 POST 方法要求 /test 頁面時,進行處理

app.use(route.post('/test', function *() {

// 回應 BODY 的 hackathon 欄位內容給瀏覽器

this.body = this.request.body.hackathon;

}));

// 監聽 3000

app.listen(3000);

Page 36: Koa 正在等一個人

Parametersvar koa = require('koa');

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

// 建立一個網站伺服器

var app = koa();

// 當有瀏覽器要求 /test 頁面時,進行處理

app.use(route.get( '/test/:hackathon' , function *(hackathon) {

// 回應 hackathon parameter 內容給瀏覽器

this.body = hackathon;

}));

// 監聽 3000

app.listen(3000);

Page 37: Koa 正在等一個人
Page 38: Koa 正在等一個人

靜態頁面支援

npm install koa-static

Page 39: Koa 正在等一個人

Staticvar koa = require('koa');

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

// 建立一個網站伺服器

var app = koa();

app.use(serve('./public'));

// 監聽 3000

app.listen(3000);

Page 40: Koa 正在等一個人
Page 41: Koa 正在等一個人

模板引擎

npm install co-views

Page 42: Koa 正在等一個人

Template Enginevar koa = require('koa');

var views = require( 'co-views');

// 建立模板渲染器,指定模板目錄及格式(以 jade 為例)

var render = views(__dirname + '/views', { ext: 'jade' });

// 建立一個網站伺服器

var app = koa();

// 找到 home.jade ,畫出並輸出頁面給瀏覽器

app.use(function *() {

this.body = yield render( 'home', { message: 'Koa is great!' });

});

// 監聽 3000

app.listen(3000);

Page 43: Koa 正在等一個人

Jade Template (home.jade)p #{message}

Page 44: Koa 正在等一個人
Page 45: Koa 正在等一個人

Sessionnpm install koa-session

Page 46: Koa 正在等一個人

Session Mechanism Initializingvar koa = require('koa');

var session = require( 'koa-session');

// 建立一個網站伺服器

var app = koa();

// 自訂或以亂數設定一組加密金鑰

app.keys = [ 'asdfghjkl!@#$%ASDFGHJ' ];

// 初始化 Session

app.use(session());

Page 47: Koa 正在等一個人

Session Usageapp.use(function *() {

// 將 Session 中 count 屬性的數字累加

var n = this.session.count || 0;

n++;

this.session.count = n;

// 將 Session 中 count 屬性內容回傳給客戶端

this.body = this.session.count;

});

Page 48: Koa 正在等一個人
Page 49: Koa 正在等一個人

Questions?

Page 50: Koa 正在等一個人

Thanks