Express 4.0 갈아타기
Express 4.0 이 나오면서 Connect가 빠졌기때문에 다소 많은 부분의 변경이 필요합니다.
Connect 는 Node 를 위한 HTTP 프렝미워크입니다
http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0
위 사이트에서 자세한 내용을 보실 수 있습니다 단 영문입니다
제 경험을 위주로 설명해보겠습니다
connect 관련입니다
app.use(express.favicon()); // favicon -> static-favicon 따로 설치
app.use(express.logger('dev')); // 삭제하셔야됩니다
app.use(express.json()); // 삭제하셔야됩니다
app.use(express.urlencoded()); // 삭제하셔야됩니다
app.use(express.methodOverride()); // 삭제하셔야됩니다
app.use(express.cookieParser('secret'));// 삭제하셔야됩니다
app.use(express.session()); // 삭제하셔야됩니다
다음과 같이 바꾸시면 됩니다
var express = require('express'),
morgan = require('morgan'),
bodyParser = require('body-parser')
methodOverride = require('method-override')
app = express();
app.use(express.static(__dirname + '/public')); // static 파일 위치입니다
app.use(morgan('dev')); // request 로깅입니다
app.use(bodyParser()); // html POST 관련 파서입니다
app.use(methodOverride()); // DELETE, PUT을 실행해줍니다(안쓰시는분들은 안하셔도 됩니다)
app.listen(8080);
console.log('Starting server on port 8080');
app.configure 이 사라졌습니다
app.configure('development', function() {
// 기존에 dev 모드일때 이렇게 사용했습니다
});
다음과 같이 변경되었습니다
var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
// dev 모드의 코드가 들어가게 됩니다
}
app.router() 이 변경되었습니다
app.use(app.router); // 이제 삭제하셔야 됩니다.
다음과 같이 사용하시면 됩니다
app.get('/login', function(req, res, next) {
});
app.post('/login', function(req, res, next) {
});
// 혹은 다음과 같이 사용하셔도 됩니다
app.route('/login')
.get(function(req, res, next){})
.post(function(req, res, next){});
// 혹은 다음과 같이 사용합니다.
var router = express.Router();
router.get('/', function(req, res, next){});
router.post('/', function(req, res, next){});
app.use('/login', router);
locals 에 관하여
기존 방식입니다
app.post('/login', function(req, res) {
app.locals({user : admin});
res.render('login');
});
다음과 같이 바뀌었습니다
app.post('/login', function(req, res) {
app.locals = {user : 'admin'}; // 혹은
app.locals.user = 'admin'
res.render('login');
});
cookieParser 에 관하여
전 socket.io와 같이 사용하는대 로그인을 cookieParser+session 으로 이용합니다
다음과 같이 사용합니다
var EXPRESS_SID_KEY = 'express.sid';
var session = require('express-session');
var cookieParser = require('cookie-parser')('secret string');
var sessionStore = new session.MemoryStore();
app.use(cookieParser);
app.use(session({
store: sessionStore,
cookie: {
httpOnly: true
},
key: EXPRESS_SID_KEY
}));
// POST 로 user 을 줬을시에 req.body.user 을 session에 받습니다
app.post('/login', function(req, res) {
req.session.user = req.body.user;
res.render('login', {title:'LOGIN'});
});
// 아래는 socket.io 에 handshake 핸들러를 통해 세션정보를 가져옵니다
// 기존에 쓰던 방식과 같습니다.
io.set('authorization', function (data, callback) {
if(!data.headers.cookie) {
return callback('No cookie transmitted.', false);
}
// We use the Express cookieParser created before to parse the cookie
// Express cookieParser(req, res, next) is used initialy to parse data in "req.headers.cookie".
// Here our cookies are stored in "data.headers.cookie", so we just pass "data" to the first argument of function
cookieParser(data, {}, function(parseErr) {
if(parseErr) { return callback('Error parsing cookies.', false); }
// Get the SID cookie
var sidCookie = (data.secureCookies && data.secureCookies[EXPRESS_SID_KEY]) ||
(data.signedCookies && data.signedCookies[EXPRESS_SID_KEY]) ||
(data.cookies && data.cookies[EXPRESS_SID_KEY]);
// Then we just need to load the session from the Express Session Store
sessionStore.load(sidCookie, function(err, session) {
// And last, we check if the used has a valid session and if he is logged in
if (err || !session || session.user == null) {
callback('Not logged in.', false);
} else {
// If you want, you can attach the session to the handshake data, so you can use it again later
// You can access it later with "socket.handshake.session"
data.session = session;
callback(null, true);
}
});
});
});
io.sockets.on('connection', function(socket) {
console.log('A socket with session ' + socket.handshake.session.user + ' connected!'); //socket.handshake.session안에 session 정보를 가져올수있습니다
})
반응형
'Study' 카테고리의 다른 글
한틀아리 3주 (0) | 2014.07.20 |
---|---|
express.js post pending problem (0) | 2014.07.08 |
한틀 스터디 (4/13) (0) | 2014.04.16 |
intellij ftp 연결 (0) | 2014.03.30 |
cannot find module "jade" (0) | 2014.03.29 |