SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
大阪Node学園八時限目
node.jsみちしるべ

expressで作るWebアプリ
2013/10/26
スライド内のリンクはクリックできます
リンクはこの色です
express
expressとは
Webアプリケーションフレームワーク
http://expressjs.com/
sinatraライクなシンプルな構成

現状node.jsでのデファクトスタンダード

デフォルトテンプレートエンジンはjade
最新バージョンは 3.4.2
express 2.x 系とはいろいろ変わってます

大阪Node学園で取り上げるのも4回目になりました
過去の情報を参照する際はバージョンに注意してく さい 私のブログとかヹヹヹ
expressのインスール
1 $ npm install -g express
2
プロジェクトの初期化
expressコボンドでプロジェクトを初期化します
1 $ express handson

expressの依存モジュールをインストール
1 $ cd handson
2 $ npm install

これでexpressが立ち上がるようになっているので動かしてみる。
1 $ node app.js

ブラウザで http://localhost:3000 にアクセスする。
"Error: listen EADDRINUSE" エラーで動かない場合は p.ecstacy app.jsをテキストエディタで開き 15行目のホート番号を3000な に変
更します。
サーバ側の処理の追加
ブラウザから
サーバ側の処理の追加
Ctrl+C でサーバを停止し、サーバを再起動する。
1 $ node app.js
2

ブラウザで http://localhost:3000/hello にアクセスしてみる。
"hello"と表示されます。
パスとイベントハンドラの追加の仕方
パスの追加
1 app.HTTPメソッ 名('ルー か のURLパス', イベン ハン

イベントハンドラの書き方
1 function(req, res){
//ここでユーザか の入力値を け
2
//ユーザに返す ータを作る
3
4 }
5

、

jQueryで

1 $('#top').on('click', function(){
//イベン ハン
ング
2
3 });

と書くのと比較すると覚えやすいかと思います。

);
テンプレートで値を表示
先ほ の app.get('/hello', ...); では直接文字列を返していましたが テンプレ
ートを使ってHTMLを返すように変更してみます。
handson/views/ ディレクトリに hello.jade という新しいファイルを作って テキ
ストエディタで開きます。
内容を次のように書いてく さい。
1 h1 こんにちは
2 p #{message} へようこそ
3

ここで作成したファイルは jade というテンプレートエンジン用のテンプレートファ
イルです。
テンプレートで値を表示
app.js の res.send('Hello', ...); の部分を次のように変更します。
1 app.get('/hello', function (req, res) {
// res.send('Hello'); この行は削除する
2
res.locals.message = 'expressハンズオン';
3
res.render('hello');
4
5 });
6

こんにちは expressハンズオンへようこそ と表示されます。
サーバを再起動してブラウザを再読み込みします。
アプリケーションの自動リロード
スクリプトを変更するたびに手動でサーバの再起動をしてきました。
開発中は変更後に自動で再起動されたほうが便利なので、ツールを使って自
動化します。
nodemonというモジュールを使います
1 $ npm install -g nodemon
2 $ nodemon app.js

app.jsファイルを保存し直すと、サーバが自動で再起動されます
入力値の け取り クエリ引数編
ブラウザで http://localhost:3000/hello?greeting=hoge を開きます。
hoge という文字列はま

この hoge という文字列をページに表示してみます。

こにも表示されていません。

app.get('/hello', ...); を次のように変更します。
1 app.get('/hello', function(req, res){
res.locals.message = req.query.greeting;
2
res.render('hello');
3
4 });

こんにちは hogeへようこそ と表示されます。

サーバを再起動して 再度ブラウザでアクセスします。
入力値の け取り URLパラメータ編
次に app.get('/hello') を次のように変更します
1 app.get('/hello/:greeting', function (req, res) {
res.locals.message = req.params.greeting;
2
res.render('hello');
3
4 });
5

http://localhost:3000/hello/fuga
サーバを再起動し ブラウザで

を開くと

fugaへようこそ と と表示されます。
入力値の け取り URLパラメータ編
この状態で http://localhost:3000/hello や http://localhost:3000/hello/ に
アクセスするとエラーになるので

空のパラメータも け付けるようにするには :greeting? のようにパラメータの最
後に?をつけます。
:greeting がないときにデフォルトの値を表示するには
1 res.locals.message = req.params.greeting || ' フォル メッセージ';
2

のようにします。
入力値の け取り POSTデータ編
hello.jade にフォームを追加します
1 form(action="/hello", method="post")
input(type="text", name="greeting")
2
input(type="submit", value="送信")
3

テキストフィールドに moga と入力して送信ボタンを押します。
ブラウザをリロードするとフォームが表示されるので
Cannot POST /hello というエラーになります。
入力値の け取り POSTデータ編
app.get('/hello'); は変更せ 、その後に次のように書きます。
1 app.post('/hello', function(req, res){
res.locals.message = req.body.greeting;
2
res.render('hello');
3
4 });
5

今度はエラーになら に mogaへようこそ 表示されます。

サーバを再起動し 再度 フォームから値を送信してみます。
GETとPOST
app.get と app.post は同じURLパスでも別の処理として記述します。
GET

POST

データの取得に使われるHTTPメソッド
サーバにデータを送るときに使われるメソッド

HTTPメソッドの種類に関係なく常に処理を実行したい場合は app.all() が使え
ます
jadeでテンプレートを継承する
HTMLタグやHEADタグをすべてのテンプレートファイルに書くのは面倒なの
で
ひとつのファイルに書いた内容を他のファイルでも使うように変更します。
views/layout.jade ファイルがすでにあるので これを使ってみます。

テキストエディタで layout.jadeを開き block contentの行の後に一行追加し
ます。
1 block content
イアウ
2

フォル コンテンツ
jadeでテンプレートを継承する
hello.jade をテキストエディタで開き いったんすべての内容を削除してから、
次のように変更します。
1 extends layout
2

ブラウザをリロードすると
レイアウトデフォルトコンテンツ と表示されます。
extends layoutのあとに2行追加します
1 extends layout
2 block content
h1 helloコンテンツ
3
4

layout.jade にある block content の内容を上書きしています。
ブラウザでアクセスすると helloコンテンツ と表示されます。
アプリケーションワイドな値とブルパ
全てのビューで表示する値はあらかじめ設定しておくことができます。
app.js のルート設定の前に次の一行を追加します。
1 app.locals.title = 'アプ ケーションワイ なサイ タイ ル';
2

ブラウザをリロードして、ページのタイトルが変わっていることを確認します。
テンプレートで表示はしないが アプリケーション全体で共有したい設定値な
は app.set() で設定し app.get() で参照します。
1 app.set('some_setting', 'some value');
2 app.get('some_setting'); // some value が返る
3
アプリケーションワイドな値とブルパ
app.locals には次のように関数を設定することもできます。
1 app.locals.braced = function(str){
return '[' + str + ']';
2
3 }

設定した関数はテンプレート内でブルパメソッドとして呼び出すことができま
す。
hello.jade でこのブルパを使ってみます。
1 p #{braced('カッコつき文字列')}
2
セッション
セッションを使うには app.js に設定を追加します。
20行目の
1 app.use(express.bodyParser());

の後に二行設定を追加します。
1 app.use(express.cookieParser());
2 app.use(express.session({key: 'sess_id', secret: 'salt'}));
3

これでセッションが使えるようになりました。
express.sessionはデフォルトでメモリ上にセッション情報を保存するので実運
用には向きません
セッション
セッションが使えることを確認するために
ダミーのログイン画面を作ってみましょう。
app.js にログイン画面用のルートを追加します。
1 app.get('/login', function(req, res){
res.render('login');
2
3 });
4

views/login.jade を新規作成します。

1 extends layout
2 block content
form(action="/login", method="post")
3
label ユーザ名
4
input(type="text", name="username")
5
input(type="submit", value="ログイン")
6
セッション
app.js にダミーのログイン処理を追加します。
1 app.post('/login', function(req, res){
req.session.username = req.body.username;
2
res.redirect('/hello');
3
4 });
5

http://localhost:3000/hello でログイン名を表示できるようにします。

1 app.get('/hello', function(req, res){
res.locals.username = req.session.username;
2
res.render('hello');
3
4 });
5
セッション
hello.jade にヤーザ名表示を表示します。
1 p としてログインしています。
2

ブラウザで http://localhost:3000/login にアクセスします。

ヤーザ名を入力してログインボタンをクリックすると /hello にリダイレクトされ
入力したヤーザ名としてログインしています と表示されます。
イベントハンドラの分離
これまでにたくさんルートを追加して app.js が少し長くなったので
イベントハンドラを別ファイルに分離してすっきりさせます。
新しいファイル routes/handson.js をつくります。
app.js で今作成したファイルを読み込みます。
場所は app.get('/hello', ...); の前にします。

1 var handson = require('./routes/handson');
2 app.get('/hello', ...);
3
イベントハンドラの分離
次に app.js と routes/handson.js をつなげるため

いま handson.js に貼りつけたイベントハンドラに名前をつけます。
routes/handson.js

1 exports.index = function(req, res){
res.locals.username = req.session.username;
2
res.render('hello');
3
4 }
5

最後に 今名前をつけた関数を app.js で呼び出します。
app.js

1 app.get('/hello', handson.index);
実行時の環境変数
サーバ実行時に環境変数を渡すことができます。
1 $ NODE_ENV=production node app.js

nodemonを使っている場合も同じです。
1 $ NODE_ENV=production nodemon app.js
2

スクリプト内では process.env で環境変数を参照できます。
app.js の最後に以下の一行を追加してみます。

1 console.log(process.env.NODE_ENV);

コンソールの最後にproduction と表示されます。
process.env の代わりに app.get('env') でも同じ結果を得られます。
1 console.log(app.get('env'));
入力値のエスケープ
express-validatorというexpress用のミドルウェアがあるのでそれを使います
https://github.com/ctavan/express-validator
インストール
1 $ npm install express-validator --save

--saveオプションをつけておくとインストールしたパッケージがpackage.jsonに
自動で追加されます
app.jsの先頭でモジュールを読み込んで、
ミドルウェアの組み込み

bodyParserの後でミドルウェアを有効にします。
1 var validator = require('express-validator');
2 (略)
app.use(express.bodyParser());
3
app.use(validator());
4
5 (略)
lessのコンパイル
https://github.com/emberfeather/less.js-middleware
less.js-middlewareをインストールします

npm install less-middleware

app.use(express.static)の前に入れる必要があります
ミドルウェアを有効にします

var lessMiddleware = require('less-middleware');
(略)
app.use(lessMiddleware({
dest: __dirname + '/public/css',
src: __dirname + '/public/less',
//force: true,
compress: true
}));
app.use(express.static(__dirname + '/public'));
(略)
データを保存する
今回はMongoDBを使います
MongoDBとは
node.jsでは最初期からモジュールがある
ドキュメント指向データベース

いまやIBM御用達
MongoDB用モジュール
MongoDB用のモジュールは大量に有ります
一番有名なのはmongooseですが、
私には使いにくいので今回はmongo-native-driverを紹 します
非公式モジュールから公式モジュールに格上げされました
mongo-native-driver
https://github.com/mongodb/node-mongodb-native
MongoDBのshellと同じような文法で書ける
多数のライブラリから利用されている

インストール
1 $ npm install mongodb --save
モジュールの読み込みと初期化
MongoDBではDBとコレクション(テーブル)は自動で作成されます。
ファイルの前の方、モジュールのrequireをしている部分に以下のコードを追加
します。
1 var mongoClient = require('mongodb').MongoClient;
2 var mongo = null;
3

続いて、ミドルウェア内でコネクションを初期化します
1 app.use(function(req, res, next){
mongoClient.connect('mongodb://127.0.0.1:27017/handson',
2
function(err, db) {
3
if(err) throw err;
4
mongo = db;
5
next();
6
}
7
);
8
9 });
データの書き込み
/helloにPOSTされたmessageをMongoDBに書き込んでみます。
1 app.post('/hello', function(req, res){
var user_message = req.body.greeting;
2
var messages = mongo.collection('messages');
3
messages.insert({message: user_message}, function (err, doc) {
4
res.locals.message = doc[0].message;
5
res.render('hello');
6
});
7
8 });

hello.jade に次の二行を付け足すと、 (入力したメッセージ)が保存されました
と表示されます。
if message
p が保存されました。
データの読み出し
/hello/list にアクセスした時に保存されたメッセージをすべて表示します
app.jsに以下のコードを追加します。
1 app.get('/hello/list', function (req, res) {
var messages = mongo.collection('messages');
2
messages.find().toArray(function (err, data) {
3
res.locals.data = data;
4
res.render('hello');
5
});
6
7 });

hello.jadeに以下のコードを追加します
1 h2 保存されたメッセージ
2 ul
3 each datum in data
li= datum.message
4

ブラウザで http://localhost:3000/hello/list にアクセスすると保存したメッセ
ージの一覧が表示されます。
asyncを使ったフローコントロール
フロー制御モジュール async

https://github.com/caolan/async
フローコントロールもたくさんモジュールがありますが、asyncが一番有名です。
並列実行、逐次処理、非同期処理の終了待ちな ができます。
フロー制御のほか、コレクションのイテレーションもできます。
asyncのインストール
インストール
1 $ npm install async --save

app.js

他のモジュールと同じように、app.jsの先頭でrequireしておきます。

1 var async = require('async');
asyncの例
MongoDBで登録されたメッセージの総数と一覧を取得してみます。
1 app.get('/hello/list', function (req, res) {
var messages = mongo.collection('messages');
2
async.parallel({
3
total: function (callback) {
4
messages.count(function (err, count) {
5
callback(err, count);
6
});
7
},
8
list: function (callback) {
9
messages.find().toArray(function (err, data) {
10
callback(err, data);
11
});
12
}
13
}, function (err, results) {
14
res.locals.data = results.list;
15
res.locals.total = results.total;
16
res.render('hello');
17
});
18
19 });
asyncの例
3行目でasyncのパラレル処理を開始しています

3行目から14行目のparallelメソッドの第一引数がオブジェクトになっていま
す
第一引数はオブジェクトか配列になります
この第一引数に並列処理したい関数を渡します
第一引数内に置く関数にはデフォルトで関数が渡されます
処理が終了したらこの関数を呼び出して、明示的に終了を知らせます
全ての関数が終了すると14行目から18行目にある関数が呼び出されるの
で、ここで結果を け取ります
その他のフロー制御の方法
Promiseライブラリを使う方法
Qが有名です(た し遅い)

BlueBirdという速いのが出ている

generatorベースのライブラリを使う方法
node 0.12.xから
第六回のスライドの後半で取り上げました
Q?
Thank you!

photo by NeilGHamilton from flickr
宣伝
HTML5とJavaScriptによるiPhone/Android両対応アプリ開発ガイド
(DESIGN & WEB TECHNOLOGY)
半年ほ 前に本を書きました

Weitere ähnliche Inhalte

Was ist angesagt?

Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3日本Javaユーザーグループ
 
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~CubedKachi
 
WordPress widget api
WordPress widget apiWordPress widget api
WordPress widget apiTakami Kazuya
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Kei Yagi
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Kei Yagi
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテストTomonori Yamada
 
Windows azureって何
Windows azureって何Windows azureって何
Windows azureって何Kana SUZUKI
 
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るEWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るKiyoshi Sawada
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
ニフティ社内の Chef 利用について
ニフティ社内の Chef 利用についてニフティ社内の Chef 利用について
ニフティ社内の Chef 利用についてtidnlyam
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話Shohei Okada
 
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発西 雄樹
 
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Misaki Kajiura
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドTetsuji Hayashi
 

Was ist angesagt? (20)

Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
 
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
 
WordPress widget api
WordPress widget apiWordPress widget api
WordPress widget api
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
Windows azureって何
Windows azureって何Windows azureって何
Windows azureって何
 
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るEWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
ニフティ社内の Chef 利用について
ニフティ社内の Chef 利用についてニフティ社内の Chef 利用について
ニフティ社内の Chef 利用について
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発
 
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
Heroku java
Heroku javaHeroku java
Heroku java
 

Ähnlich wie 大阪Node学園八時限目 「expressで作るWebアプリ」

13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村Koichi Uchimura
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSKazuhiro Kotsutsumi
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドKazumi Hirose
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925Yu Ito
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールAtsuo Ishimoto
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門miso- soup3
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう Shuhei Iitsuka
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 

Ähnlich wie 大阪Node学園八時限目 「expressで作るWebアプリ」 (20)

Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Ext.direct
Ext.directExt.direct
Ext.direct
 
Koa.js_エンジニア勉強会20140328
Koa.js_エンジニア勉強会20140328 Koa.js_エンジニア勉強会20140328
Koa.js_エンジニア勉強会20140328
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 

大阪Node学園八時限目 「expressで作るWebアプリ」