Koa.js_エンジニア勉強会20140328

514 views

Published on

3月28日に行われたエスキュービズム社内勉強会の資料になります。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
514
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Koa.js_エンジニア勉強会20140328

  1. 1. koa.js 2014.3.28
  2. 2. agenda ● node.jsのアプリケーションフレームワーク ● 非同期 ● koa.js
  3. 3. https://github.com/koajs/koa
  4. 4. なんか化粧品っぽいロゴ? https://www.shiseido.co.jp/
  5. 5. node.jsのアプリケーションフレームワーク http://expressjs.com/ ・アプリの雛形を形成 ・view, middlewareの選択 ・routing
  6. 6. viewの提供 middleware routing var express = require('express') var app = express(); app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.static(__dirname + '/public')); app.use(express.json()); app.use(app.router); }); // Routes app.get('/', routes.index); app.listen(3000); node.jsのアプリケーションフレームワーク
  7. 7. 現状はexpressが牛耳ってますが これに取って代わる存在として koa.jsが話題に。 node.jsのアプリケーションフレームワーク http://business.nikkeibp.co.jp/article/person/20080729/166535/? rt=nocnt
  8. 8. what’s new? koa.jsは以下のような特徴を持ちます。 ・generator/yieldを使ってmiddlewareを記述可能  -> 非同期処理いい具合にします ・koa.jsは最小限の仕事をするmoduleの集まり  -> フレームワークのシンプル化、柔軟性向上 ・http通信のrequestやresponseをラップした、 コンテキストという概念を持つ  -> リクエスト処理のシンプル化、エラーハンドリング 非同期地獄にサヨナラ!
  9. 9. 非同期地獄 ・node.jsでは頻繁に非同期地獄に遭遇します var fs = require('fs'); // カレント ディレクトリーのファイル一覧を取得する fs.readdir('.', function(err, files) { // 先頭のファイルの中身を読み取る fs.readFile(files[0], 'utf-8', function(err, data) { // 読み取った結果を出力する console.log(data); }); }); app.use(function (req, res, next) { var end = res.end(); res.end = function (…) { // monkey patching … // a post-filter res.write(…); end(); }; next(); });
  10. 10. koa.jsの場合 before after var co = require('co'); var fs = require('fs'); co(function *() { var files = yield co.wrap(fs.readdir)('.'); var data = yield co.wrap(fs.readFile)(files[0], 'utf-8'); console.log(data); }); var fs = require('fs'); // カレント ディレクトリーのファイル一覧 を取得する fs.readdir('.', function(err, files) { // 先頭のファイルの中身を読み取る fs.readFile(files[0], 'utf-8', function (err, data) { // 読み取った結果を出力する console.log(data); }); });
  11. 11. 今日はこれを解説します。 ・generator/yieldを使って  middlewareを記述可能
  12. 12. ・yieldって?? 一言で言えば、関数を途中で止められる。 generator/ yield
  13. 13. function* N() { console.log("start"); yield 1; console.log("after 1"); yield 2; console.log("after 2"); return 3; } generator/ yield 関数定義は、 「function」 ではなく、「function*」 で宣言 var g = N() を実行すると、 関数が処理されるのではなく、関数を処 理するためのジェネレータが返る
  14. 14. function* N() { console.log("start"); yield 1; console.log("after 1"); yield 2; console.log("after 2"); return 3; } generator/ yield // generatorを生成 var g = N(); console.log(g.next()); // start // { value: 1, done: false } console.log(g.next()); // start // { value: 2, done: false } console.log(g.next()); // start // { value: 3, done: true }
  15. 15. generator/ yield つまり、こんな書き方ができます https://github.com/koajs/koa/blob/master/docs/guide.md
  16. 16. co.js generater、yieldを応用した、非同期処理を管理す るモジュール koa.jsの挙動の基本となるモジュール var co = require('co'); var fs = require('fs'); co(function *() { var files = yield co.wrap(fs.readdir)('.'); var data = yield co.wrap(fs.readFile)(files[0], 'utf-8'); console.log(data); });
  17. 17. 挙動例 「co(koa.js)は中で何をしているのか.」http://qiita.com/nashibao@github/items/5bab9744c26f74c1aa0d
  18. 18. ・node.js 0.12以降で可能です。  - DECIDEでは使ってないです。。 # asyncというモジュールでカバー ・起動方法がちょっと変わります。 - (before) node app.js - (after) node --harmony app.js 制限事項
  19. 19. co.js まとめ generator, yield 非同期処理 エラーハンドリング コンテキスト制御

×