쿠키와 요청본문, 쿼리 스트링을 해석하는 미들웨어

cookieParser()

웹 브라우저의 쿠키를 해석해 req.cookies에 넣는다.

var express = require('express');
var cookieParser = require('cookie-parser');
 
var app = express();
app.use(cookieParser());
 
app.get('/', function (req, res) {
  // Cookies that have not been signed
  console.log('Cookies: ', req.cookies);
 
  // Cookies that have been signed
  console.log('Signed Cookies: ', req.signedCookies);
})
 
app.listen(3000, function(req, res) {
  console.log("running on 3000 port");
});

cookie response setting

res.setHeader('Set-Cookie', 'foo=bar');
res.setHeader('Set-Cookie', 'tobi=feert');
res.end();

req.signedCookies(서명된 쿠키)

//req.signedCookies에 {name : value} 추가
res.cookie('name', 'value', {signed:true});
 
//req.cookies에 {name : value} 추가
res.cookie('name', 'value', {signed:false});

bodyParser()

요청 본문을 받아서 해석해 req.body에 넣는다.

var express = require('express')
var bodyParser = require('body-parser')
 
var app = express()
 
// create application/json parser
var jsonParser = bodyParser.json()
 
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

bodyParser.urlencodeed :
url 인코딩된 본문만을 parse하는 미들웨어를 반환, x-www-form-urlencoded parser 임을 명시
기본값은 true이지만 더이상 사용되지 않는다.

app.use(bodyParser.urlencoded({ extended: false }))

top-level middleware(모든 요청에 body 구문을 parse한다)

var express = require('express')
var bodyParser = require('body-parser')
 
var app = express()
 
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
 
// parse application/json
app.use(bodyParser.json())
 
app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})
 
app.listen(3000);

express4.x부터 body-parser 미들웨어의 multipart 기능 불가능해짐
connect-multipart 등 미들웨어 사용

limit()

bodyParser()와 같이 사용해서 요청이 커지지 않게 제한한다.

예시를 위해 bodyPaser 미들웨어에 multipart(업로드 및 form-data파싱)을 추가하가 위해 connect-multiparty 미들웨어를 사용

var fs = require('fs');
var express = require('express');
var multiparty = require('connect-multiparty');
var multipartMiddleware = multiparty();
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
 
var app = express();
 
app.use(cookieParser());
app.use(bodyParser.json({limit: '1mb'}));
//업로드하여 저장할 디렉토리 지정(디렉토리가 존재하여야 한다.)
app.use(multiparty({uploadDir : __dirname + '/multipart'}));
 
app.get('/', function(req, res) {
  fs.readFile('index.html', function(err, data) {
    res.send(data.toString());
  })
});
 
app.post('/', function(req, res) {
  console.log(req.body);
  console.log(req.files);
 
  res.redirect('/');
});
 
app.listen(3000, function() {
  console.log('server running on 3000 port');
})

limit가 필요한 이유 :
악의적인 사용자가 HTTP 클라이언트를 사용해 대량의 파일 데이터를 만들어서 공격하는 것을 방지

var express = require('express');
var http = require('http');
var app = express();
 
var req = http.request({
  method: 'POST',
  port:3000,
  headers: {
    'Content-Type': 'application/json'
  }
});
 
req.write('[');
var n = 30000000;
while(n--) {
  req.write('"foo",');
}
req.write('"bar"]');
 
req.end();

query()

요청 URL 쿼리 스트링을 req.query에 넣는다.

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.query));
})

localhost:3000?query=query_data 로 url 호출시 {"query":"query_data"}가 출력된다.

'Framework > Nodejs' 카테고리의 다른 글

이메일 발송  (0) 2017.07.13
MVC model  (0) 2017.07.07
mocha  (0) 2017.07.05
connect  (0) 2017.04.04
FileUpload  (0) 2017.03.26

+ Recent posts