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'));