2017.01.26 EXPRESSJS &TESTING
Ivan Wei
⾃自由職業者 -
 在哪都在⼯工作
歐酷網路路 -

 後端架構⼯工程師
時間軸科技 -
 網站⼯工程師
cmder ( Open source )
BASH ON UBUNTU ON WINDOWS
BASH ON UBUNTU ON
WINDOWS
• Windows 10 ( 64-bit )
• OS build 14393 or later
• 安裝⼿手冊 (符合條件就安裝吧)
NODE FRAMEWORKS
• Express
• koa.js
• hapi
• ThinkJS
• Nodal
• Feathers
• ItemsAPI
• KeystoneJS
• Kraken
• LEAN-STACK
• LoopBack
• MEAN
• Sails
• …
為什什麼⼤大家都⽤用 EXPRESS
基本款該有都有,不該有都沒有
更更多的 NODE FRAMEWORKS
http://nodeframework.com/
HI, EXPRESS
⽅方法⼀一
1. npm install express-generator -g
2. express --view=jade [myapp]
3. cd myapp
4. npm start
⽅方法⼆二
⾃自⼰己來來
動⼿手玩 EXPRESS
git init
• 初始化 Git 資料 ( 會增加 .git 資料夾 )
• git branch 、 git diff [file1 file2] 、 git add files 、
git commit ‘new branch name’ 、 git push
npm init ( 內容⾃自⼰己打 )
• 初始化 package.json
• 預設 npm start、 npm test ( npm run [script] )
建立 app.js
const express = require('express');
const app = express();
const http = require('http');
const port = 3000;
http.createServer(app)
.listen(port, function() {
console.log('App listening on port ' + port + '!'); // Server 啟動後吐回⽬目前的 PORT 碼
});
我們有⼀一個 Node Server
node app.js
可是…
我要這做什什麼?
Controllers / Routers
• 建立⼀一個 controllers / routers 資料夾
• 之後什什麼 Router 都放進去
建立 index.js
const express = require('express');
const router = express.Router();
router.get('/', function(req, res) {
res.end(‘It works’);
});
module.exports = router;
更更新 app.js
const express = require('express');
const app = express();
const http = require('http');
const port = 3000;
const index = require(‘./controllers/index');
app.use('/', index);
http.createServer(app)
.listen(port, function() {
console.log('App listening on port ' + port + '!'); // Server 啟動後吐回⽬目前的 PORT 碼
});
看⾒見見希望了了
Views
• 建立⼀一個 views 資料夾
• 之後什什麼 HTML / Jade (Pug) / EJS 都放進去
建立 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Jade</title>
</head>
<body>
<h1>Jade - node template engine</h1>
<div id="container" class="col">
<p>You are amazing</p>
<p>Jade is a terse and simple
templating language with a
strong focus on performance
and powerful features.</p>
</div>
</body>
</html>
更更新 controllers/index.js
const express = require('express');
const router = express.Router();
router.get('/', function(req, res) {
const options = {
root: './views/'
}
res.sendFile('index.html', options);
});
module.exports = router;
神啊!能讓 HTML
不這麼變扭嗎
有的!Jade (Pug) / EJS / …
接下來來以 Jade (Pug) 為例例
建立 views/index.jade
doctype html
html(lang='en')
head
title Jade
body
h1 Jade - node template engine (#{title})
#container.col
pYou are amazing
p
| Jade is a terse and simple
| templating language with a
| strong focus on performance
| and powerful features.
更更新 app.js
const express = require('express');
const app = express();
const http = require('http');
const port = 3000;
const index = require(‘./controllers/index');
app.use('/', index);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
http.createServer(app)
.listen(port, function() {
console.log('App listening on port ' + port + '!'); // Server 啟動後吐回⽬目前的 PORT 碼
});
更更新 controllers/index.js
const express = require('express');
const router = express.Router();
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
module.exports = router;
中間換
場時間
寫個 API 測試很簡單
⾸首先要安裝…
npm install should supertest --save-dev
npm install mocha -g
名稱 ⽤用途 設定檔
Mocha.js 測試發動機 mocha.opts
Should.js 稽核⼈人員
supertest 模擬 http request
建立 test/mocha.opts
--timeout 500000
--require should
--reporter spec
--ui bdd
--recursive ./app.js
然後…
直接看 CODE 吧!
(這裡)
Q&A
最後記得交作業
作業
• https://github.com/IvanWei/Homework-20170126
• 交作業期限:2017/02/02
謝謝⼤大家

Class 20170126