SlideShare a Scribd company logo
Koa 正在等一個人
Koa Is Just Waiting For You
Fred Chien
Fred Chien
錢逢祥
cfsghost
At Github
fred-zone
blogspot.com
Open Source Developer
HanGee
蕃薯哥
HanGee
蕃薯哥
Koa?
苦啊?
討論 Koa 之前
最近什麼最潮
?
Node.js v.s. io.js
0.12 的搶先釋出大戰
ECMAScript 6
Generator
Node.js 0.11.9+
Generator
使用 ES6 的方法
node --harmony
Koa 正在等一個人
初入 Generator
How to write a generator?
Generator 的使用流程
1. 宣告 Generator 函數
2. 建立 Generator 物件
3. 執行 Generator 內部流程
Generator 的使用方法
function* myGenerator() {
console.log('My Generator!');
}
var generator = myGenerator();
generator.next();
設計流程
With Generator
Generator 的基本流程設計
function* myGenerator() {
console.log('My Generator!');
yield
console.log('My Generator! Again!');
yield
console.log('My Generator! Again! Again!');
}
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');
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');
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()
長得 Sync 樣
卻有 Async 骨
Generator
Koa 正在等一個人
Koa 起手式
npm install koa
First Example
var koa = require( 'koa');
// 建立一個網站伺服器
var app = koa();
// 當有瀏覽器要求頁面時,進行處理
app.use(function *() {
// 回應文字內容給瀏覽器
this.body = 'My First Koa Web' ;
});
// 監聽 3000
app.listen(3000);
Koa 正在等一個人
Routing
npm install koa-route
Routing
var 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);
Koa 正在等一個人
Data Transfer
Query String, body, parameters
Query String
var 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);
Body Parser
npm install koa-bodyparser
Body
var 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);
Parameters
var 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);
Koa 正在等一個人
靜態頁面支援
npm install koa-static
Static
var koa = require( 'koa');
var serve = require( 'koa-static');
// 建立一個網站伺服器
var app = koa();
app.use(serve( './public'));
// 監聽 3000
app.listen(3000);
Koa 正在等一個人
模板引擎
npm install co-views
Template Engine
var 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);
Jade Template (home.jade)
p #{message}
Koa 正在等一個人
Session
npm install koa-session
Session Mechanism Initializing
var koa = require( 'koa');
var session = require( 'koa-session');
// 建立一個網站伺服器
var app = koa();
// 自訂或以亂數設定一組加密金鑰
app.keys = [ 'asdfghjkl!@#$%ASDFGHJ' ];
// 初始化 Session
app.use(session());
Session Usage
app.use(function *() {
// 將 Session 中 count 屬性的數字累加
var n = this.session.count || 0;
n++;
this.session.count = n;
// 將 Session 中 count 屬性內容回傳給客戶端
this.body = this.session.count;
});
Koa 正在等一個人
Questions?
Thanks

More Related Content

PDF
學好 node.js 不可不知的事
Ben Lue
 
PDF
Node.js從無到有 基本課程
Simon Su
 
PDF
NodeJS基礎教學&簡介
GO LL
 
PDF
Npm 套件管理 & 常用開發工具介紹
wantingj
 
PDF
用最潮的 Java script 盡情開發 kde qt 程式
Fred Chien
 
PPTX
使用 Visual Studio Code 建構 JavaScript 應用程式
Will Huang
 
PDF
Non-MVC Web Framework
Fred Chien
 
PDF
Node.js 淺談socket.io
Simon Su
 
學好 node.js 不可不知的事
Ben Lue
 
Node.js從無到有 基本課程
Simon Su
 
NodeJS基礎教學&簡介
GO LL
 
Npm 套件管理 & 常用開發工具介紹
wantingj
 
用最潮的 Java script 盡情開發 kde qt 程式
Fred Chien
 
使用 Visual Studio Code 建構 JavaScript 應用程式
Will Huang
 
Non-MVC Web Framework
Fred Chien
 
Node.js 淺談socket.io
Simon Su
 

What's hot (20)

PDF
CP 值很高的 Gulp
Yvonne Yu
 
PDF
Java script 全面逆襲!使用 node.js 打造桌面環境!
Fred Chien
 
PDF
不一樣的Web server... coServ
Ben Lue
 
PDF
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
 
PDF
Node.js 進攻桌面開發
Fred Chien
 
PDF
Gulp.js 自動化前端任務流程
洧杰 廖
 
PDF
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
Chu-Siang Lai
 
PPTX
Nodejs introduce - using Socket.io
Caesar Chi
 
PDF
Node js实践
jay li
 
PDF
webpack 入門
Anna Su
 
PPTX
Node.js长连接开发实践
longhao
 
PDF
Automate with Ansible basic (3/e)
Chu-Siang Lai
 
PDF
現代 IT 人一定要知道的 Ansible 自動化組態技巧
Chu-Siang Lai
 
PDF
Automate with Ansible basic (2/e)
Chu-Siang Lai
 
PPTX
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
Will Huang
 
PDF
使用Javascript及HTML5打造協同運作系統
Hsu Ping Feng
 
PDF
從軟體開發角度
談 Docker 的應用
謝 宗穎
 
PDF
React.js what do you really mean?
昱安 周
 
PDF
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
 
PPTX
Node.js中间件 connect模块深入浅出
Eric Xiao
 
CP 值很高的 Gulp
Yvonne Yu
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Fred Chien
 
不一樣的Web server... coServ
Ben Lue
 
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
 
Node.js 進攻桌面開發
Fred Chien
 
Gulp.js 自動化前端任務流程
洧杰 廖
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
Chu-Siang Lai
 
Nodejs introduce - using Socket.io
Caesar Chi
 
Node js实践
jay li
 
webpack 入門
Anna Su
 
Node.js长连接开发实践
longhao
 
Automate with Ansible basic (3/e)
Chu-Siang Lai
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
Chu-Siang Lai
 
Automate with Ansible basic (2/e)
Chu-Siang Lai
 
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
Will Huang
 
使用Javascript及HTML5打造協同運作系統
Hsu Ping Feng
 
從軟體開發角度
談 Docker 的應用
謝 宗穎
 
React.js what do you really mean?
昱安 周
 
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
 
Node.js中间件 connect模块深入浅出
Eric Xiao
 
Ad

More from Fred Chien (13)

PDF
MakerBoard: MT7688 Emulator
Fred Chien
 
PDF
Brig:Node.js + QML 華麗大冒險
Fred Chien
 
PDF
超酷炫科幻 UI:QML 入門
Fred Chien
 
PDF
OwaNEXT
Fred Chien
 
PDF
QML + Node.js
Fred Chien
 
PDF
Stem OS Proposal
Fred Chien
 
PDF
Stem is JavaScript OS
Fred Chien
 
PDF
我編譯故我在:誰說 Node.js 程式不能編成 binary
Fred Chien
 
PDF
App house
Fred Chien
 
PDF
Enjoy Writing Modern Desktop Application in JavaScript
Fred Chien
 
PDF
軟體人甘苦談
Fred Chien
 
PDF
Let s Enjoy Node.js
Fred Chien
 
PDF
How to Write Node.js Module
Fred Chien
 
MakerBoard: MT7688 Emulator
Fred Chien
 
Brig:Node.js + QML 華麗大冒險
Fred Chien
 
超酷炫科幻 UI:QML 入門
Fred Chien
 
OwaNEXT
Fred Chien
 
QML + Node.js
Fred Chien
 
Stem OS Proposal
Fred Chien
 
Stem is JavaScript OS
Fred Chien
 
我編譯故我在:誰說 Node.js 程式不能編成 binary
Fred Chien
 
App house
Fred Chien
 
Enjoy Writing Modern Desktop Application in JavaScript
Fred Chien
 
軟體人甘苦談
Fred Chien
 
Let s Enjoy Node.js
Fred Chien
 
How to Write Node.js Module
Fred Chien
 
Ad

Koa 正在等一個人