Routing
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฏธ๋ค์จ์ด๋ก ๋ถ๋ฐฐ
app.all(path,callback)
app.get(path,callback)
app.post(path,callback)
app.put(path,callback)
app.delete(path,callback)
- ๋์ Parameter :
app.get('/user/:item',callback)
- Parameter ์ป๊ธฐ :
req.params.item
app.get('/user:id',function(req,res){
var userId = req.params.id;
})
app.get('/movies/:movieid/:actor',function(req,res){
var movieid = req.params.movieid;
var actor = req.params.actor;
})
- ๋์ Parameter์ ์์๊ฐ ์ค์ ( item๋๋ฌธ์ sample์ ์ฒ๋ฆฌ ๋ถ๊ฐ )
/user/:item
/user/sample
์ ๊ท์ ์ฌ์ฉํ๊ธฐ
?
: ๋ฌธ์ ์กด์ฌํ๊ฑฐ๋ ์๋ต+
: 1๋ฒ ์ด์ ๋ฐ๋ณต*
: ์์์ ๋ฌธ์
// /abcd, /acd
app.get('ab?cd',function(req,res){});
// /abcd, /abbcd, /abbbcd
app.get('ab+cd',function(req,res){});
// /abcd, /abxcd, /abRABODMDOFMDFcd, /ab123cd
app.get('ab*cd',function(req,res){});
// /abe, /abcde
app.get('ab(cd)?e',function(req,res){});
Route ํจ์
app.route('/book')
.get(function(req,res){
})
.post(function(req,res){
})
Router ์์ค์ Middleware
express.Router
- Routing Logic์ ๋ณ๋๋ก ๋ถ๋ฆฌ ๊ฐ๋ฅ
- ์๋ ๊ฒฝ๋ก ์์ฒญ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์์ ์ด ์ฝ๋ค.
Error Middleware
Middleware ๋ด๋ถ์์ ์ฒ๋ฆฌ
- ๊ฐ๊ฐ ๋ฏธ๋ค์จ์ด์์ ์๋ฌ ์ฒ๋ฆฌ
- ์๋ฌ ์ฒ๋ฆฌ ๋ก์ง์ด ์ ๊ฐ๊ฐ
- ์๋ฌ ์ฒ๋ฆฌ ์ฝ๋ ์ค๋ณต
Error Handler Middleware์๊ฒ ์์
- ์ผ๊ด๋ ์๋ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- Error Handler Middleware๋ Middleware ์ค ํ์์
Error Parameter
app.use(function(err,req,res,next){
var error = new Error("ERROR MESSAGE");
error.code = 100;
return next(error);
})
ํ๊ฒฝ ๋ณ ์๋ฌ ์ฒ๋ฆฌ
// Window
set NODE_ENV=product
node myapp.js
// Linux
$ NODE_ENV=product node myapp.js
$ NODE_ENV=development node myapp.js
app.get('env')
if(app.get('env') === 'development'){ //๊ฐ๋ฐ ์ค์
}
else{ // product
}
Third Party Middleware
Favicon Middleware
serve-favicon
npm install serve-favicon
favicon(path, options)
- ์ ์์์ ๋ฐฐ์นํ์ฌ ์ฒ๋ฆฌํ๋ค.
var express = require('express');
var favicon = require('serve-favicon');
var app = express();
app.use(favicon(__dirname + '/public/favicon.ico'));
Log Middleware
morgan
npm install morgan
var express = require('express');
var morgan = require('morgan');
var app = express();
app.use(morgan('dev')); // dev ๋ก๊ทธ ํฌ๋งท
app.get('/hello', function (req, res) {
res.send('GET request, /');
});
app.get('/movies', function(req, res) {
res.send('GET request, /movies');
});
app.listen(3000);
-
winston
: ๋ค์ํ ๋ก๊ทธ ํฌ๋งท, email, sms, ํ์ผ, db์ ์ ์ฅ -
npm install winston
-
Transport๋ฅผ ํ์ฉํ์ฌ Output ์ค์
-
๋ณ๋ ์ค์น transports
-
DailyRotateFile
-
CouchDB,Redis,MongoDB
-
Mail transport
-
Notification Service
var winston = require('winston');
winston.info('INFO message');
winston.warn('warn message');
winston.add(winston.transports.File,filename);
winston.remove(winston.transports.Console);
winston.add(require('winston-daily-rotate-file'),{datePattern:'yyyyMMdd'},filename);
BodyParser Middleware
npm install body-parser
- JSON, RAW, TEXT, URL-Encoded
- Multipart ์ง์ X
JSON
- options
inflate
: ์์ถ๋ ๋ฉ์์ง ๋ฐ๋ ๋ค๋ฃจ๊ธฐlimit
: ๋ฐ๋ ๋ฉ์์ง ํฌ๊ธฐ.strict
: JSON ๊ตฌ์กฐ์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ง ์ ์app.use(BodyParser.json())
URL-Encoded
- options
extended
: queryString์ผ๋ก ํ์ฑparameterLimit
: parameter ๊ฐ์ ์ ํinflate, limit
: JSON๊ณผ ๋์ผapp.use(bodyParser.urlencoded({extended:false}));
Parser Result
var title = req.body.title;
var message = req.body.message;
Method Override
npm install method-override
- HTML์์ GET/POST๋ง ๊ฐ๋ฅ
- Get/Post๋ง๊ณ Put/Delete๋ฑ ๋ค๋ฅธ Method๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ฅ
POST /?resource_method=DELETE
์ฌ์ฉ๋ฒ
app.use(methodOverride('_method'));