[API-d18] - 實戰開發 - 套件模組
會使用到的套件:
主體:
express - web framework
body-parser - parse request body
測試相關:
mocha - test framework
mocha-mongoose - 用來和 mocha 和 mongoose 中間做介接的套件
superagent - 拿它來丟 http request
validator - 用來驗證某個物件是否為某個型別
expect.js - 類似 BDD 的語法,用來寫測試的
debug - debug package
DB 相關:
mongoose - mongodb orm
mongodb - mongodb native driver
開發相關:
nodemon - detect file change and restart server
生產環境相關:
log4js - 記錄 request log
這是我的 package.json, 可以複製到專案目錄,然後下 npm install
{
"name": "TODOAPI",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node ./bin/server.js env=development",
"test": "./node_modules/mocha/bin/mocha",
"test-detail": "./node_modules/mocha/bin/mocha --reporter list",
"stop": "pkill -lf server.js"
},
"author": "kerkerj",
"license": "ISC",
"dependencies": {
"body-parser": "^1.9.0",
"debug": "^2.0.0",
"expect.js": "^0.3.1",
"express": "^4.9.5",
"log4js": "^0.6.21",
"mocha": "^1.21.4",
"mocha-mongoose": "^1.0.1",
"mongodb": "^1.4.19",
"mongoose": "^3.8.17",
"superagent": "^0.20.0",
"validator": "^3.19.1"
}
}
安裝套件,及全域套件 mocha
// in project folder
$ npm install express body-parser mocha mocha-mongoose superagent validator expect.js debug mongoose mongodb log4js -save
$ npm install -g nodemon
各個套件簡單設定
接下來會針對一些套件作說明,但是由於可能有些人不懂整個專案的運作,因此下面看看就好,之後實作上有問題可以再回來看。
Nodemon 的作用
範例:
$ nodemon ./bin/server.js
...
就可以放著不管它了~ 只要檔案有變動,就會自動重開 server
使用 logger - log4js
設定 logger - log4js, 並將 log 寫入到 logs/access.log 裏
// Set logger
var log4js = require('log4js');
log4js.configure({
appenders: [
{ type: 'console' }, //控制台輸出
{
type: 'file', //文件輸出
filename: 'logs/access.log',
maxLogSize: 20000000, // 20 MB
backups: 10,
category: 'normal'
}
],
replaceConsole: true
});
var logger = log4js.getLogger('normal');
logger.setLevel('INFO');
app.use(log4js.connectLogger(logger, {level: 'auto', format:':method :url'}));
使用 body-parser 處理 request 的資料
加入 middleware
app.use( bodyParser.json() );
app.use( bodyParser.urlencoded({ extended: true }) );
需要加入 { extended: true/false }, 否則會 warning:
body-parser deprecated undefined extended: provide extended
如果要接收 json request
client 端在 Header 中必須先設定 “Content-type: applciation/json”
才能夠在 router 中使用 req.body
拿到 json 值
測試套件
mocha - 專案
expect.js - 專案
superagent - 專案
測試流程 -
先跑 server 起來,透過自動化程式自動丟 request 給 server,測試結束
$ npm start
$ mocha
$ npm stop
所以必須先在 package.json 中設定好 script
{
(...)
"scripts": {
"start": "node ./bin/server.js",
"test": "mocha",
"stop": "pkill -lf server.js"
},
(...)
}
由於我將啟動 server 的 script 放在 bin 資料夾裡,因此
npm start
的 script 就會執行:
node ./bin/server.js
npm stop
的話,用到了 *nix 的指令,會先到 process list 中找到和 server.js 有關的 process,然後 kill process (pkill
)
pkill -lf server.js
跑測試的話,直接下 mocha
,在這邊我們也丟一個 script 指定給 npm test
下 npm test
就是等同於下 mocha
上面只是大致上講解一下每個套件如何用,接下來我們會以實際的例子來說明