SlideShare une entreprise Scribd logo
1  sur  107
Node.js + Express で作る Webアプリ
はじめに
• 本日の概要
– 環境確認
– 静的ファイル配信
– データ投入
– データ取得
はじめに
今回作成するWebアプリの紹介
はじめに
• すべて作成しきれません。
• 重要なポイントを演習していきます。
はじめに
• コーディングする箇所は以下ようなコメント範囲です。
// ------- PROGRAMING -START- --------------------
// ------- PROGRAMING - END - --------------------
<!-- ------- PROGRAMING -START- -------------------- -->
<!-- ------- PROGRAMING - END - -------------------- -->
環境確認
ソースコード(課題)
• 以下のURLからソースコードをダウンロード
https://goo.gl/UUz71V
※ダウンロード後は npm install を実行して準備。
環境確認
• Visual Studio Code 1.27.2
• Node.js 8.9
• MongoDB 4.0
環境確認
Visual Studio Code
プログラムファイルからVisualStudioCodeを起動。
課題フォルダを開いて npm install を実行。npm install
環境確認
Node.js
統合ターミナルで node –v を実行。node -v
環境確認
MongoDB
統合ターミナルで mongo を実行。mongo
静的ファイル配信
静的ファイルの配信
• 学習内容
– Expressの基本を理解
• 作るもの
– 静的ファイル配信
静的ファイルの配信
Expressの基本実装
var express = require("express");
var app = express();
// サーバー処理をいろいろ...
app.listen(3000);
静的ファイルの配信
Expressでミドルウェアを利用する方法
– 無条件に利用
– パスを指定して利用
app.use(<ミドルウェア>);
app.use(<URL>, <ミドルウェア>)
静的ファイルの配信
Expressでミドルウェアを利用する方法
– 無条件に利用
– パスを指定して利用
app.use(<ミドルウェア>);
app.use(<URL>, <ミドルウェア>)
function (request, response, next) {
next();
}
静的ファイルの配信
静的ファイルを配信するミドルウェア
express.static("<フォルダ>")
静的ファイルの配信
静的ファイルを配信するミドルウェア
express.static("<フォルダ>")
絶対パスを指定すると良い。
静的ファイルの配信
Node.jsで使える特殊変数
– 実行中モジュールが存在するディレクトリ
– 実行中モジュールのファイル名
__dirname
__filename
【課題1】(制限時間:10分)
/public/sample.html を以下のURLで表示できるようにする。
http://localhost:3000/public/sample.html
※以下のファイルを修正
- /app.js
【解答例1】
/app.js
var path = require("path");
var express = require("express");
var app = express();
app.use("/public", express.static(path.join(__dirname, "/public")));
app.listen(3000);
ルーティング
静的ファイルの配信
• 学習内容
– Expressの設定
– モジュール
– ルーター
• 作るもの
– 静的ファイル配信
Expressの設定
app.set() で各種設定が可能
– EJSを利用する
– その他設定できる項目リスト
http://expressjs.com/ja/api.html#app.set
app.set("view engine", "ejs");
モジュール
関数やオブジェクトを外部ファイルに掃き出す
– 関数
– オブジェクト
var sample = function (request, response, next) {
// 処理
};
module.exports = sample;
module.exports = {
// 設定
};
ルーティングとは
指定されたURLに対してどの処理をするかを決めたルール
ルーティングとは
指定されたURLに対してどの処理をするかを決めたルール
//localhost:3000/shop
ルーティングとは
指定されたURLに対してどの処理をするかを決めたルール
var express = require("express");
var app = express();
app.get("/", function () { /* 処理1 */ });
app.get("/search", function () { /* 処理2 */ });
app.get("/shop", function () { /* 処理3 */ });
app.get("/account", function () { /* 処理4 */ });
app.listen(3000);
//localhost:3000/shop
ルーティングとは
指定されたURLに対してどの処理をするかを決めたルール
var express = require("express");
var app = express();
app.get("/", function () { /* 処理1 */ });
app.get("/search", function () { /* 処理2 */ });
app.get("/shop", function () { /* 処理3 */ });
app.get("/account", function () { /* 処理4 */ });
app.listen(3000);
//localhost:3000/shop
ルーティングとは
指定されたURLに対してどの処理をするかを決めたルール
var express = require("express");
var app = express();
app.get("/", function () { /* 処理1 */ });
app.get("/search", function () { /* 処理2 */ });
app.get("/shop", function () { /* 処理3 */ });
app.get("/account", function () { /* 処理4 */ });
app.listen(3000);
//localhost:3000/shop
ルーターとは
ルーティングの塊を定義できるミドルウェア
var express = require("express");
var app = express();
app.get("/", function () { /* 処理1 */ });
app.get("/search", function () { /* 処理2 */ });
app.get("/shop", function () { /* 処理3 */ });
app.get("/account", function () { /* 処理4 */ });
app.listen(3000);
ルーターとは
ルーティングの塊を定義できるミドルウェア
var express = require("express");
var app = express();
app.get("/", function () { /* 処理1 */ });
app.get("/search", function () { /* 処理2 */ });
app.get("/shop", function () { /* 処理3 */ });
app.get("/account", function () { /* 処理4 */ });
app.listen(3000);
あるURL以下をまとめる
ルーターとは
ルーティングの塊を定義できるミドルウェア
var express = require("express");
var app = express();
app.get("/", function () { /* 処理1 */ });
app.get("/search", function () { /* 処理2 */ });
app.get("/shop", function () { /* 処理3 */ });
app.get("/account", function () { /* 処理4 */ });
app.listen(3000);
var express = require("express");
var app = express();
app.use("/", (function () {
var router = require("express").Router();
router.get("/", function () {});
router.get("/search", function () {});
router.get("/shop", function () {});
router.get("/account", function () {});
return router;
}));
app.listen(3000);
ルーター
express.Router() の使い方
– 定義
– 利用
var router = require("express").Router();
router.get("URL", (request, response) => {
// 処理
});
module.exports = router;
app.use(<URL>, <ルーター>);
ルーター
express.Router() の使い方
var router = require("express").Router();
router.get("URL", (request, response) => {
// 処理
});
module.exports = router;
処理したいメソッド
ルーター
express.Router() の使い方
var router = require("express").Router();
router.get("URL", (request, response) => {
// 処理
});
module.exports = router;
処理したいURL
ルーター
express.Router() の使い方
var router = require("express").Router();
router.get("URL", (request, response) => {
// 処理
});
module.exports = router;
app.use() で指定したURL
からの相対URLになる
ルーター
express.Router() の使い方
var router = require("express").Router();
router.get("URL", (request, response) => {
// 処理
});
module.exports = router; 処理内容
ルーター
レスポンス
– EJSを返す
– リダイレクト
response.render(<viewsフォルダからの相対パス>)
response.redirect(<リダイレクト先URL>)
【課題2】(制限時間:10分)
/views/index.ejs を以下のURLで表示できるようにする。
http://localhost:3000/
※以下のファイルを修正
- /app.js
- /routes/index.js
【解答例2】
/app.js
var path = require("path");
var express = require("express");
var app = express();
app.set("view engine", "ejs");
app.use("/public", express.static(path.join(__dirname, "/public")));
app.use("/", require("./routes/index.js"));
app.listen(3000);
【解答例2】
/routes/index.js
var router = require("express").Router();
router.get("/", (request, response) => {
response.render("./index.ejs");
});
module.exports = router;
データ投入
データ投入
• 学習内容
– MongoDBの基本操作を理解
• 作るもの
– サンプルデータ
投入するデータ
投入先
データベース: shoprepo
コレクション: shops
投入するデータ
ドキュメント
{
_id: "d20cbc9d",
name: "日本料理 蔵",
categories: ["割烹・小料理"],
tel: "03-1111-xxxx",
address: "東京都港区赤坂",
holiday: "月曜",
seats: 10,
score: 4.25,
reviews: [{
id: ObjectId("5b9d0d5703b540fdf79e9827"),
user: "tanaka",
score: 4.0,
visit: ISODate("2018-08-15T00:00:00+09:00"),
post: ISODate("2018-08-16T00:00:00+09:00"),
description: "大変おいしかったです。"
}]
}
投入するデータ
ドキュメント
{
_id: "d20cbc9d",
name: "日本料理 蔵",
categories: ["割烹・小料理"],
tel: "03-1111-xxxx",
address: "東京都港区赤坂",
holiday: "月曜",
seats: 10,
score: 4.25,
reviews: [{
id: ObjectId("5b9d0d5703b540fdf79e9827"),
user: "tanaka",
score: 4.0,
visit: ISODate("2018-08-15T00:00:00+09:00"),
post: ISODate("2018-08-16T00:00:00+09:00"),
description: "大変おいしかったです。"
}]
}
店舗情報
レビュー
MongoDBの操作
接続
切断
mongo <IP>/<データベース>
> exit
MongoDBの操作
バッチ処理
mongo <IP>/<データベース> <バッチファイル>
MongoDBの操作
バッチ処理
mongo <IP>/<データベース> <バッチファイル>
JavaScriptファイル
MongoDBの操作
データ確認
> db.<コレクション>.find().pretty()
【課題3】(制限時間:5分)
1. 以下にあるバッチファイルを利用して「shoprepo」データ
ベースへデータ投入する。
2. データ投入できていることを確認する。
/lib/database/sampledata.js
【解答例3】
1. 以下にあるバッチファイルを利用して「shoprepo」データ
ベースへデータ投入する。
2. データ投入できていることを確認する。
/lib/database/sampledata.js
mongo 127.0.0.1/shoprepo ./lib/database/sampledata.js
> db.shops.find().pretty()
データ取得
データ取得
• 学習内容
– EJSの基本
– MongoDBからデータ取得
• 作るもの
– ショップページ
データ取得
• 作るもの
http://localhost:3000/shop/xxxx
データ取得
• 作るもの
shop._id = xxxx を取得
データ取得
• 作るもの
/views/shop/index.ejs
に shop._id = xxxx のデータを
埋め込んで返す
データ取得
• 作るもの
③
/views/shop/index.ejs
に shop._id = xxxx のデータを
埋め込んで返す
①
http://localhost:3000/shop/xxxx
xxxx を取り出す
②
shop._id = xxxx を取得
データ取得①
データ取得①
• 作るもの
①
http://localhost:3000/shop/xxxx
xxxx を取り出す
URLルーティング
URLの一部をパラメータとして受け取る
– リクエスト例
– 受け取り例
app.get("/api/user/:id", (request, response) => {
var id = request.params.id;
});
http://localhost:3000/api/user/xxxx
URLルーティング
URLの一部をパラメータとして受け取る
– リクエスト例
– 受け取り例
app.get("/api/user/:id", (request, response) => {
var id = request.params.id;
});
http://localhost:3000/api/user/xxxx
パラメータ「:<変数>」
URLルーティング
URLの一部をパラメータとして受け取る
– リクエスト例
– 受け取り例
app.get("/api/user/:id", (request, response) => {
var id = request.params.id;
});
http://localhost:3000/api/user/xxxx
パラメータ「:<変数>」
【課題4】(制限時間:10分)
以下のURLでアクセスしてshopId("d20cbc9d")を
コンソール表示する。
http://localhost:3000/shop/d20cbc9d
※以下の2ファイルを修正
- /app.js
- /routes/shop.js
【解答例4】
/app.js
var path = require("path");
var express = require("express");
var app = express();
... (中略) ...
app.use("/", require("./routes/index.js"));
app.use("/shop", require("./routes/shop.js"));
app.listen(3000);
【解答例4】
/routes/shop.js
var router = require("express").Router();
router.get("/:id", (request, response) => {
var _id = request.params.id;
console.log(_id);
});
module.exports = router;
データ取得②
データ取得②
• 作るもの
②
shop._id = xxxx を取得
MongoDB接続
データベース接続
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
// ... (データベース操作) ...
});
MongoDB接続
データベース接続
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
// ... (データベース操作) ...
}); 接続先URL
MongoDB接続
データベース接続
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
// ... (データベース操作) ...
}); 接続オプション
MongoDB接続
データベース接続
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
// ... (データベース操作) ...
});
接続後コールバック
MongoDB接続
データベース接続
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
// ... (データベース操作) ...
});
Dbオブジェクト取得
MongoDBデータ取得
データ取得
db.collection("shops")
.find(query)
.toArray()
.then((results) => {
// 成功時処理
}).catch((error) => {
// エラー時処理
}).then(() => {
client.close();
});
MongoDBデータ取得
データ取得
db.collection("shops")
.find(query)
.toArray()
.then((results) => {
// 成功時処理
}).catch((error) => {
// エラー時処理
}).then(() => {
client.close();
});
指定したコレクション
に対して検索
MongoDBデータ取得
データ取得
db.collection("shops")
.find(query)
.toArray()
.then((results) => {
// 成功時処理
}).catch((error) => {
// エラー時処理
}).then(() => {
client.close();
});
単純キー完全一致検索条件
{ _id: “hogehoge” }
MongoDBデータ取得
データ取得
db.collection("shops")
.find(query)
.toArray()
.then((results) => {
// 成功時処理
}).catch((error) => {
// エラー時処理
}).then(() => {
client.close();
});
検索結果が配列ではない
ので配列へ変換
MongoDBデータ取得
データ取得
db.collection("shops")
.find(query)
.toArray()
.then((results) => {
// 成功時処理
}).catch((error) => {
// エラー時処理
}).then(() => {
client.close();
});
成功/失敗に応じた
続きの処理
【課題5】(制限時間:15分)
以下のURLでアクセスしてshopId("d20cbc9d")の
データを取得してコンソール表示する。
http://localhost:3000/shop/d20cbc9d
※以下のファイルを修正
- /routes/shop.js
【解答例5】
/routes/shop.js
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
var router = require("express").Router();
var MongoClient = require("mongodb").MongoClient;
router.get("/:id", (request, response) => {
var _id = request.params.id;
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
db.collection("shops").find({ _id }).toArray()
.then((results) => {
console.log(JSON.stringify(results));
}).catch((error) => {
console.log(error);
}).then(() => { 次のページへつづく。
/routes/shop.js
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
db.collection("shops").find({ _id }).toArray()
.then((results) => {
console.log(JSON.stringify(results));
}).catch((error) => {
console.log(error);
}).then(() => {
client.close();
});
})
});
module.exports = router;
【解答例5】
前ページのつづき。
データ取得③
データ取得③
• 作るもの
③
/views/shop/index.ejs
に shop._id = xxxx のデータを
埋め込んで返す
EJSへデータを渡す
データ渡し(ルーター)
router.get("<URL>", (request, response) => {
response.render("<EJSへのパス>", <EJSへ渡したいデータ>);
});
第2引数にデータを指定
EJSでデータを取り出す
データ取り出し(EJS)
<%= 変数名 %>
簡単な演算も可能
【課題6】(制限時間:15分)
以下のURLでアクセスしてshopId(“d20cbc9d”)の
データを取得して店舗情報を画面表示する。
http://localhost:3000/shop/d20cbc9d
※以下のファイルを修正
- /routes/shop.js
- /views/shop/index.ejs
【解答例6】
/routes/shop.js
var { URL, DATABASE, OPTIONS } = require("../config/mongodb.config.js");
... (中略) ...
MongoClient.connect(URL, OPTIONS, (error, client) => {
var db = client.db(DATABASE);
db.collection("shops").find({ _id }).toArray()
.then((results) => {
response.render("./shop/index.ejs", results[0]);
}).catch((error) => {
console.log(error);
}).then(() => {
client.close();
});
... (中略) ...
【解答例6】
/views/shop/index.ejs
<!DOCTYPE html>
... (中略) ...
<div class="border-bottom mt-5 mb-5">
<h1 class="display-4"><%= name %></h1>
<p class="h3">
<span class="rate-star" style="--rate: <%= (score/5.00)*100 %>%;"></span>
<span><%= score %></span>
</p>
</div>
... (中略) ...
次のページへつづく。
【解答例6】
/views/shop/index.ejs
<div>
<h2 class="border-bottom mt-5 mb-5 pb-2"><i class="fa fa-fw fa-book"></i> 店舗...
<table class="table table-bordered">
<colgroup>
<col class="bg-light" style="width: 10rem">
<col class="">
</colgroup>
<tr>
<th>店名</th>
<td><%= name %></td>
</tr>
<tr>
<th>カテゴリー</th>
<td><%= categories %></td>
</tr>
<tr>
次のページへつづく。
【解答例6】
/views/shop/index.ejs
<tr>
<th>カテゴリー</th>
<td><%= categories %></td>
</tr>
<tr>
<th>電話</th>
<td><%= tel %></td>
</tr>
<tr>
<th>住所</th>
<td><%= address %></td>
</tr>
<tr>
<th>定休日</th>
<td><%= holiday %></td>
</tr>
次のページへつづく。
【解答例6】
/views/shop/index.ejs
<tr>
<th>カテゴリー</th>
<td><%= categories %></td>
</tr>
<tr>
<th>電話</th>
<td><%= tel %></td>
</tr>
<tr>
<th>住所</th>
<td><%= address %></td>
</tr>
<tr>
<th>定休日</th>
<td><%= holiday %></td>
</tr>
次のページへつづく。
【解答例6】
/views/shop/index.ejs
<tr>
<th>定休日</th>
<td><%= holiday %></td>
</tr>
<tr>
<th>座席数</th>
<td><%= seats %></td>
</tr>
</table>
</div>
... (中略) ...
</html>
おまけ課題
【課題】
以下のURLでアクセスしてshopId("d20cbc9d")の
データを取得してレビュー情報を画面表示する。
http://localhost:3000/shop/d20cbc9d
※以下のファイルを修正
- /views/shop/index.ejs
- /views/shop/review.ejs
【解答例】
/views/shop/index.ejs
.... (中略) ....
<div>
<div class="position-relative">
<h2 class="border-bottom mt-5 mb-5 pb-2">口コミ</h2>
<div class="position-absolute" style="right:0; top:0;">
<a href="/account/review/regist?shop=xxxxxx">投稿する</a>
</div>
</div>
<div>
<% for (var review of reviews) { %>
<% review.shop = _id; %>
<%- include("./review.ejs", review) %>
<% } %>
</div>
</div>
.... (中略) ....
【解答例】
/views/shop/review.ejs
<div class="row">
<div class="col-sm-2">
<span class="h1"><i class="fa fa-fw fa-user-o"></i></span>
<span><%= user %></span>
</div>
... (中略) ...
<div class="col-sm-11">
<p class="card-text" style="min-height: 2rem;"><%= description %></p>
<p class="card-text text-muted">
<small>
訪問日:<%= visit %>
次のページへつづく。
【解答例】
/views/shop/review.ejs
<p class="card-text" style="min-height: 2rem;"><%= description %></p>
<p class="card-text text-muted">
<small>
訪問日:<%= visit %>
<span class="rate-star" style="--rate:<%=(score/5.00)*100 %>%;"></span>
<%= score %>
</small>
</p>
</div>
... (中略) ...
まとめ
まとめ
• Node.js+Express+MongoDBを利用した
以下の学習をしました。
– 静的ファイル配信
– データ投入
– データ取得
• 解答例
https://goo.gl/JtrfU8
Develop Web Application with Node.js + Express

Contenu connexe

Tendances

T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
Oda Shinsuke
 
5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com
Kenta Tsuji
 

Tendances (20)

イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation
 
Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
 
Oracle how-to-audit-backup
Oracle how-to-audit-backupOracle how-to-audit-backup
Oracle how-to-audit-backup
 
Paging Libraryの利用をやめたいお気持ち表明
Paging Libraryの利用をやめたいお気持ち表明Paging Libraryの利用をやめたいお気持ち表明
Paging Libraryの利用をやめたいお気持ち表明
 
CakeRequest::onlyAllow() について
CakeRequest::onlyAllow() についてCakeRequest::onlyAllow() について
CakeRequest::onlyAllow() について
 
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶPanamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com
 

Similaire à Develop Web Application with Node.js + Express

[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
Insight Technology, Inc.
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
Dell TechCenter Japan
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 

Similaire à Develop Web Application with Node.js + Express (20)

[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
db tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストアdb tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストア
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
for Developer、 Microsoft Edge とInternet Explorer で 新しくサポートされるAPI
for Developer、Microsoft Edge とInternet Explorer で新しくサポートされるAPI for Developer、Microsoft Edge とInternet Explorer で新しくサポートされるAPI
for Developer、 Microsoft Edge とInternet Explorer で 新しくサポートされるAPI
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 

Plus de Akinari Tsugo

Plus de Akinari Tsugo (7)

RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 
Software Test Monitoring
Software Test MonitoringSoftware Test Monitoring
Software Test Monitoring
 
Software Test Technique
Software Test TechniqueSoftware Test Technique
Software Test Technique
 
Software Test Basic
Software Test BasicSoftware Test Basic
Software Test Basic
 
Node.js Hands-On
Node.js Hands-OnNode.js Hands-On
Node.js Hands-On
 
Startup JavaScript
Startup JavaScriptStartup JavaScript
Startup JavaScript
 
第8回 業開中心会議 LT 「User Agent の 変遷」
第8回業開中心会議 LT 「User Agent の 変遷」第8回業開中心会議 LT 「User Agent の 変遷」
第8回 業開中心会議 LT 「User Agent の 変遷」
 

Develop Web Application with Node.js + Express