쿠키와 요청본문, 쿼리 스트링을 해석하는 미들웨어
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"}가 출력된다.