diff --git a/README.md b/README.md index 35e7217..13695a6 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,22 @@ Node.js 프로그래밍 : 클라우드 컴퓨팅 시대의 고성능 자바스 - [강컴](http://kangcom.com/sub/view.asp?topid=5&sku=201202070001) - [인터파크](http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0000400000&sc.prdNo=209853133&bookblockname=b_sch&booklinkname=bprd_title) - [교보문고](http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960772762) -* 이 예제는 Node.js v0.6.6 기반으로 작성되었습니다. +* 이 예제는 Node.js v0.8.14 기반으로 작성되었습니다. * 잘못된 부분을 발견하시면 이슈에 등록해 주세요. +## 기존 소스에 비해서 주요 변경사항 + +* node 0.8.x 호환성 맞춤 + * `path.exist` -> `fs.exist` +* npm 모듈 최신버전으로 갱신 + * restler 2.0.1로 업그래이드 + * express 3.1.x로 업그래이드 + * express 실행코드 변경 + * jade 템플릿을 레이아웃 방식에서 상속방식으로 변경 + * socket.io 연동객체 변경 + * socket.io 0.9.x으로 업그래이드 + * clog 0.1.x로 업그래이드 + +* 주요 변경사항은 [커밋로그](https://github.com/outsideris/node.js-programming/commit/c0b42b349135b2ad5c85f8f3165bbeec99f6ffb1)에서 확인할 수 있습니다. + diff --git a/chapter-05/package.json b/chapter-05/package.json index 682de08..c7186ff 100644 --- a/chapter-05/package.json +++ b/chapter-05/package.json @@ -9,8 +9,8 @@ "node": "~v0.4.10" }, "dependencies": { - "node-schedule": "~0.1.4" - , "restler": "~0.2.3" + "node-schedule": "~0.1.5" + , "restler": "~2.0.1" }, "devDependencies": {} } diff --git a/chapter-06/joinin-mongodb/app.js b/chapter-06/joinin-mongodb/app.js index 8dc1e76..b5ce54a 100644 --- a/chapter-06/joinin-mongodb/app.js +++ b/chapter-06/joinin-mongodb/app.js @@ -4,9 +4,10 @@ */ var express = require('express') + , http = require('http') , routes = require('./routes') -var app = module.exports = express.createServer(); +var app = module.exports = express(); // Configuration @@ -33,5 +34,6 @@ app.get('/', routes.index); app.get('/join', routes.form); app.post('/join', routes.join); -app.listen(3000); -console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); +var server = http.createServer(app); +server.listen(3000); +console.log("Express server listening on port %d in %s mode", server.address().port, app.settings.env); diff --git a/chapter-06/joinin-mongodb/package.json b/chapter-06/joinin-mongodb/package.json index ed8eb27..f6da7ac 100644 --- a/chapter-06/joinin-mongodb/package.json +++ b/chapter-06/joinin-mongodb/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "express": "~2.5.0", + "express": "~3.1.0", "jade": ">= 0.0.1", "mongolian": "~0.1.14" } diff --git a/chapter-06/joinin-mongodb/views/index.jade b/chapter-06/joinin-mongodb/views/index.jade index c9c35fa..dcf18da 100644 --- a/chapter-06/joinin-mongodb/views/index.jade +++ b/chapter-06/joinin-mongodb/views/index.jade @@ -1,2 +1,5 @@ -h1= title -p Welcome to #{title} \ No newline at end of file +extends layout + +block contents + h1= title + p Welcome to #{title} diff --git a/chapter-06/joinin-mongodb/views/join-fail.jade b/chapter-06/joinin-mongodb/views/join-fail.jade index 0064a29..dc62bcb 100644 --- a/chapter-06/joinin-mongodb/views/join-fail.jade +++ b/chapter-06/joinin-mongodb/views/join-fail.jade @@ -1,3 +1,6 @@ -h3 회원가입 오류 -p 이미 가입된 이름 또는 이메일입니다. -a(href='/join') 회원 가입페이지로 돌아가기 +extends layout + +block contents + h3 회원가입 오류 + p 이미 가입된 이름 또는 이메일입니다. + a(href='/join') 회원 가입페이지로 돌아가기 diff --git a/chapter-06/joinin-mongodb/views/join-form.jade b/chapter-06/joinin-mongodb/views/join-form.jade index 5aab3da..8cb229f 100644 --- a/chapter-06/joinin-mongodb/views/join-form.jade +++ b/chapter-06/joinin-mongodb/views/join-form.jade @@ -1,19 +1,22 @@ -h3 회원가입 -p 회원에 가입해 주세요. -form(id='joinForm', method='POST', action='/join') - label(for='name') 이름 : - input(type='text', name='name', id='name') - label(for='email') 이메일 : - input(type='text', name='email', id='email') - input(type='submit', value='전송') +extends layout -script(type='text/javascript') - $(document).ready(function() { - $('#joinForm').submit(function(e) { - if ($.trim($('#name').val()) === '' || $.trim($('#email').val()) === '') { - alert('이름과 이메일을 입력해 주세요.'); - return false; - } - }); - }); - +block contents + h3 회원가입 + p 회원에 가입해 주세요. + form(id='joinForm', method='POST', action='/join') + label(for='name') 이름 : + input(type='text', name='name', id='name') + label(for='email') 이메일 : + input(type='text', name='email', id='email') + input(type='submit', value='전송') + + script(type='text/javascript') + $(document).ready(function() { + $('#joinForm').submit(function(e) { + if ($.trim($('#name').val()) === '' || $.trim($('#email').val()) === '') { + alert('이름과 이메일을 입력해 주세요.'); + return false; + } + }); + }); + diff --git a/chapter-06/joinin-mongodb/views/join-result.jade b/chapter-06/joinin-mongodb/views/join-result.jade index f1a825d..fea1b68 100644 --- a/chapter-06/joinin-mongodb/views/join-result.jade +++ b/chapter-06/joinin-mongodb/views/join-result.jade @@ -1,6 +1,9 @@ -h3 회원가입완료 -p 가입한 회원 정보는 아래와 같습니다. -div - ul - li 이름 : #{username} - li 이메일 : #{useremail} +extends layout + +block contents + h3 회원가입완료 + p 가입한 회원 정보는 아래와 같습니다. + div + ul + li 이름 : #{username} + li 이메일 : #{useremail} diff --git a/chapter-06/joinin-mongodb/views/layout.jade b/chapter-06/joinin-mongodb/views/layout.jade index f2051cc..646abb0 100644 --- a/chapter-06/joinin-mongodb/views/layout.jade +++ b/chapter-06/joinin-mongodb/views/layout.jade @@ -4,4 +4,5 @@ html title= title link(rel='stylesheet', href='/stylesheets/style.css') script(type='text/javascript', src='http://code.jquery.com/jquery-1.7.0.min.js') - body!= body + body + block contents diff --git a/chapter-06/joinin-mysql/app.js b/chapter-06/joinin-mysql/app.js index 8dc1e76..b5ce54a 100644 --- a/chapter-06/joinin-mysql/app.js +++ b/chapter-06/joinin-mysql/app.js @@ -4,9 +4,10 @@ */ var express = require('express') + , http = require('http') , routes = require('./routes') -var app = module.exports = express.createServer(); +var app = module.exports = express(); // Configuration @@ -33,5 +34,6 @@ app.get('/', routes.index); app.get('/join', routes.form); app.post('/join', routes.join); -app.listen(3000); -console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); +var server = http.createServer(app); +server.listen(3000); +console.log("Express server listening on port %d in %s mode", server.address().port, app.settings.env); diff --git a/chapter-06/joinin-mysql/package.json b/chapter-06/joinin-mysql/package.json index efc9c2c..64073f1 100644 --- a/chapter-06/joinin-mysql/package.json +++ b/chapter-06/joinin-mysql/package.json @@ -3,8 +3,8 @@ "version": "0.0.1", "private": true, "dependencies": { - "express": "~2.5.0", + "express": "~3.1.0", "jade": ">= 0.0.1", - "mysql": "~0.9.5" + "mysql": "~0.9.6" } } diff --git a/chapter-06/joinin-mysql/views/index.jade b/chapter-06/joinin-mysql/views/index.jade index c9c35fa..dcf18da 100644 --- a/chapter-06/joinin-mysql/views/index.jade +++ b/chapter-06/joinin-mysql/views/index.jade @@ -1,2 +1,5 @@ -h1= title -p Welcome to #{title} \ No newline at end of file +extends layout + +block contents + h1= title + p Welcome to #{title} diff --git a/chapter-06/joinin-mysql/views/join-fail.jade b/chapter-06/joinin-mysql/views/join-fail.jade index 0064a29..dc62bcb 100644 --- a/chapter-06/joinin-mysql/views/join-fail.jade +++ b/chapter-06/joinin-mysql/views/join-fail.jade @@ -1,3 +1,6 @@ -h3 회원가입 오류 -p 이미 가입된 이름 또는 이메일입니다. -a(href='/join') 회원 가입페이지로 돌아가기 +extends layout + +block contents + h3 회원가입 오류 + p 이미 가입된 이름 또는 이메일입니다. + a(href='/join') 회원 가입페이지로 돌아가기 diff --git a/chapter-06/joinin-mysql/views/join-form.jade b/chapter-06/joinin-mysql/views/join-form.jade index 5aab3da..8cb229f 100644 --- a/chapter-06/joinin-mysql/views/join-form.jade +++ b/chapter-06/joinin-mysql/views/join-form.jade @@ -1,19 +1,22 @@ -h3 회원가입 -p 회원에 가입해 주세요. -form(id='joinForm', method='POST', action='/join') - label(for='name') 이름 : - input(type='text', name='name', id='name') - label(for='email') 이메일 : - input(type='text', name='email', id='email') - input(type='submit', value='전송') +extends layout -script(type='text/javascript') - $(document).ready(function() { - $('#joinForm').submit(function(e) { - if ($.trim($('#name').val()) === '' || $.trim($('#email').val()) === '') { - alert('이름과 이메일을 입력해 주세요.'); - return false; - } - }); - }); - +block contents + h3 회원가입 + p 회원에 가입해 주세요. + form(id='joinForm', method='POST', action='/join') + label(for='name') 이름 : + input(type='text', name='name', id='name') + label(for='email') 이메일 : + input(type='text', name='email', id='email') + input(type='submit', value='전송') + + script(type='text/javascript') + $(document).ready(function() { + $('#joinForm').submit(function(e) { + if ($.trim($('#name').val()) === '' || $.trim($('#email').val()) === '') { + alert('이름과 이메일을 입력해 주세요.'); + return false; + } + }); + }); + diff --git a/chapter-06/joinin-mysql/views/join-result.jade b/chapter-06/joinin-mysql/views/join-result.jade index f1a825d..fea1b68 100644 --- a/chapter-06/joinin-mysql/views/join-result.jade +++ b/chapter-06/joinin-mysql/views/join-result.jade @@ -1,6 +1,9 @@ -h3 회원가입완료 -p 가입한 회원 정보는 아래와 같습니다. -div - ul - li 이름 : #{username} - li 이메일 : #{useremail} +extends layout + +block contents + h3 회원가입완료 + p 가입한 회원 정보는 아래와 같습니다. + div + ul + li 이름 : #{username} + li 이메일 : #{useremail} diff --git a/chapter-06/joinin-mysql/views/layout.jade b/chapter-06/joinin-mysql/views/layout.jade index f2051cc..646abb0 100644 --- a/chapter-06/joinin-mysql/views/layout.jade +++ b/chapter-06/joinin-mysql/views/layout.jade @@ -4,4 +4,5 @@ html title= title link(rel='stylesheet', href='/stylesheets/style.css') script(type='text/javascript', src='http://code.jquery.com/jquery-1.7.0.min.js') - body!= body + body + block contents diff --git a/chapter-06/joinin/app.js b/chapter-06/joinin/app.js index 8dc1e76..b5ce54a 100644 --- a/chapter-06/joinin/app.js +++ b/chapter-06/joinin/app.js @@ -4,9 +4,10 @@ */ var express = require('express') + , http = require('http') , routes = require('./routes') -var app = module.exports = express.createServer(); +var app = module.exports = express(); // Configuration @@ -33,5 +34,6 @@ app.get('/', routes.index); app.get('/join', routes.form); app.post('/join', routes.join); -app.listen(3000); -console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); +var server = http.createServer(app); +server.listen(3000); +console.log("Express server listening on port %d in %s mode", server.address().port, app.settings.env); diff --git a/chapter-06/joinin/package.json b/chapter-06/joinin/package.json index b2ea708..7129b3b 100644 --- a/chapter-06/joinin/package.json +++ b/chapter-06/joinin/package.json @@ -3,7 +3,7 @@ , "version": "0.0.1" , "private": true , "dependencies": { - "express": "~2.5.0" + "express": "~3.1.0" , "jade": ">= 0.0.1" } } diff --git a/chapter-06/joinin/views/index.jade b/chapter-06/joinin/views/index.jade index c9c35fa..dcf18da 100644 --- a/chapter-06/joinin/views/index.jade +++ b/chapter-06/joinin/views/index.jade @@ -1,2 +1,5 @@ -h1= title -p Welcome to #{title} \ No newline at end of file +extends layout + +block contents + h1= title + p Welcome to #{title} diff --git a/chapter-06/joinin/views/join-form.jade b/chapter-06/joinin/views/join-form.jade index 5aab3da..8cb229f 100644 --- a/chapter-06/joinin/views/join-form.jade +++ b/chapter-06/joinin/views/join-form.jade @@ -1,19 +1,22 @@ -h3 회원가입 -p 회원에 가입해 주세요. -form(id='joinForm', method='POST', action='/join') - label(for='name') 이름 : - input(type='text', name='name', id='name') - label(for='email') 이메일 : - input(type='text', name='email', id='email') - input(type='submit', value='전송') +extends layout -script(type='text/javascript') - $(document).ready(function() { - $('#joinForm').submit(function(e) { - if ($.trim($('#name').val()) === '' || $.trim($('#email').val()) === '') { - alert('이름과 이메일을 입력해 주세요.'); - return false; - } - }); - }); - +block contents + h3 회원가입 + p 회원에 가입해 주세요. + form(id='joinForm', method='POST', action='/join') + label(for='name') 이름 : + input(type='text', name='name', id='name') + label(for='email') 이메일 : + input(type='text', name='email', id='email') + input(type='submit', value='전송') + + script(type='text/javascript') + $(document).ready(function() { + $('#joinForm').submit(function(e) { + if ($.trim($('#name').val()) === '' || $.trim($('#email').val()) === '') { + alert('이름과 이메일을 입력해 주세요.'); + return false; + } + }); + }); + diff --git a/chapter-06/joinin/views/join-result.jade b/chapter-06/joinin/views/join-result.jade index f1a825d..fea1b68 100644 --- a/chapter-06/joinin/views/join-result.jade +++ b/chapter-06/joinin/views/join-result.jade @@ -1,6 +1,9 @@ -h3 회원가입완료 -p 가입한 회원 정보는 아래와 같습니다. -div - ul - li 이름 : #{username} - li 이메일 : #{useremail} +extends layout + +block contents + h3 회원가입완료 + p 가입한 회원 정보는 아래와 같습니다. + div + ul + li 이름 : #{username} + li 이메일 : #{useremail} diff --git a/chapter-06/joinin/views/layout.jade b/chapter-06/joinin/views/layout.jade index f2051cc..646abb0 100644 --- a/chapter-06/joinin/views/layout.jade +++ b/chapter-06/joinin/views/layout.jade @@ -4,4 +4,5 @@ html title= title link(rel='stylesheet', href='/stylesheets/style.css') script(type='text/javascript', src='http://code.jquery.com/jquery-1.7.0.min.js') - body!= body + body + block contents diff --git a/chapter-06/simpleweb/app.js b/chapter-06/simpleweb/app.js index 7574676..4870393 100644 --- a/chapter-06/simpleweb/app.js +++ b/chapter-06/simpleweb/app.js @@ -4,9 +4,10 @@ */ var express = require('express') + , http = require('http') , routes = require('./routes') -var app = module.exports = express.createServer(); +var app = module.exports = express(); // Configuration @@ -31,5 +32,7 @@ app.configure('production', function(){ app.get('/', routes.index); -app.listen(3000); -console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); + +var server = http.createServer(app); +server.listen(3000); +console.log("Express server listening on port %d in %s mode", server.address().port, app.settings.env); diff --git a/chapter-06/simpleweb/package.json b/chapter-06/simpleweb/package.json index b2ea708..7129b3b 100644 --- a/chapter-06/simpleweb/package.json +++ b/chapter-06/simpleweb/package.json @@ -3,7 +3,7 @@ , "version": "0.0.1" , "private": true , "dependencies": { - "express": "~2.5.0" + "express": "~3.1.0" , "jade": ">= 0.0.1" } } diff --git a/chapter-06/simpleweb/views/index.jade b/chapter-06/simpleweb/views/index.jade index c9c35fa..dcf18da 100644 --- a/chapter-06/simpleweb/views/index.jade +++ b/chapter-06/simpleweb/views/index.jade @@ -1,2 +1,5 @@ -h1= title -p Welcome to #{title} \ No newline at end of file +extends layout + +block contents + h1= title + p Welcome to #{title} diff --git a/chapter-06/simpleweb/views/layout.jade b/chapter-06/simpleweb/views/layout.jade index 1a36941..c104427 100644 --- a/chapter-06/simpleweb/views/layout.jade +++ b/chapter-06/simpleweb/views/layout.jade @@ -3,4 +3,5 @@ html head title= title link(rel='stylesheet', href='/stylesheets/style.css') - body!= body \ No newline at end of file + body + block contents diff --git a/chapter-07/connect/package.json b/chapter-07/connect/package.json index e7b5138..3a18b49 100644 --- a/chapter-07/connect/package.json +++ b/chapter-07/connect/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "socket.io": "0.8.7" + "socket.io": "0.9.13" }, "devDependencies": {}, "engines": { diff --git a/chapter-07/connect/server.js b/chapter-07/connect/server.js index 3abed2c..4f45f8c 100644 --- a/chapter-07/connect/server.js +++ b/chapter-07/connect/server.js @@ -6,7 +6,7 @@ var http = require('http') var server = http.createServer(function(req, res) { var filename = path.join(process.cwd(), req.url); - path.exists(filename, function(exists) { + fs.exists(filename, function(exists) { if(!exists) { res.writeHead(404, {"Content-Type": "text/plain"}); res.write("404 Not Found\n"); diff --git a/chapter-07/custom-event/package.json b/chapter-07/custom-event/package.json index e7b5138..3a18b49 100644 --- a/chapter-07/custom-event/package.json +++ b/chapter-07/custom-event/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "socket.io": "0.8.7" + "socket.io": "0.9.13" }, "devDependencies": {}, "engines": { diff --git a/chapter-07/custom-event/server.js b/chapter-07/custom-event/server.js index 48d5b1b..9fbc38f 100644 --- a/chapter-07/custom-event/server.js +++ b/chapter-07/custom-event/server.js @@ -6,7 +6,7 @@ var http = require('http') var server = http.createServer(function(req, res) { var filename = path.join(process.cwd(), req.url); - path.exists(filename, function(exists) { + fs.exists(filename, function(exists) { if(!exists) { res.writeHead(404, {"Content-Type": "text/plain"}); res.write("404 Not Found\n"); diff --git a/chapter-07/message/package.json b/chapter-07/message/package.json index e7b5138..3a18b49 100644 --- a/chapter-07/message/package.json +++ b/chapter-07/message/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "socket.io": "0.8.7" + "socket.io": "0.9.13" }, "devDependencies": {}, "engines": { diff --git a/chapter-07/message/server.js b/chapter-07/message/server.js index a78ed51..6fdbcf8 100644 --- a/chapter-07/message/server.js +++ b/chapter-07/message/server.js @@ -6,7 +6,7 @@ var http = require('http') var server = http.createServer(function(req, res) { var filename = path.join(process.cwd(), req.url); - path.exists(filename, function(exists) { + fs.exists(filename, function(exists) { if(!exists) { res.writeHead(404, {"Content-Type": "text/plain"}); res.write("404 Not Found\n"); diff --git a/chapter-07/namespace/package.json b/chapter-07/namespace/package.json index e7b5138..3a18b49 100644 --- a/chapter-07/namespace/package.json +++ b/chapter-07/namespace/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "socket.io": "0.8.7" + "socket.io": "0.9.13" }, "devDependencies": {}, "engines": { diff --git a/chapter-07/namespace/server.js b/chapter-07/namespace/server.js index 1b03341..f66d13a 100644 --- a/chapter-07/namespace/server.js +++ b/chapter-07/namespace/server.js @@ -6,7 +6,7 @@ var http = require('http') var server = http.createServer(function(req, res) { var filename = path.join(process.cwd(), req.url); - path.exists(filename, function(exists) { + fs.exists(filename, function(exists) { if(!exists) { res.writeHead(404, {"Content-Type": "text/plain"}); res.write("404 Not Found\n"); diff --git a/chapter-07/room/package.json b/chapter-07/room/package.json index e7b5138..3a18b49 100644 --- a/chapter-07/room/package.json +++ b/chapter-07/room/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "socket.io": "0.8.7" + "socket.io": "0.9.13" }, "devDependencies": {}, "engines": { diff --git a/chapter-07/room/server.js b/chapter-07/room/server.js index ad57dfa..715596a 100644 --- a/chapter-07/room/server.js +++ b/chapter-07/room/server.js @@ -6,7 +6,7 @@ var http = require('http') var server = http.createServer(function(req, res) { var filename = path.join(process.cwd(), req.url); - path.exists(filename, function(exists) { + fs.exists(filename, function(exists) { if(!exists) { res.writeHead(404, {"Content-Type": "text/plain"}); res.write("404 Not Found\n"); diff --git a/chapter-07/volatile/package.json b/chapter-07/volatile/package.json index e7b5138..3a18b49 100644 --- a/chapter-07/volatile/package.json +++ b/chapter-07/volatile/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "socket.io": "0.8.7" + "socket.io": "0.9.13" }, "devDependencies": {}, "engines": { diff --git a/chapter-07/volatile/server.js b/chapter-07/volatile/server.js index 9e54010..beb044c 100644 --- a/chapter-07/volatile/server.js +++ b/chapter-07/volatile/server.js @@ -6,7 +6,7 @@ var http = require('http') var server = http.createServer(function(req, res) { var filename = path.join(process.cwd(), req.url); - path.exists(filename, function(exists) { + fs.exists(filename, function(exists) { if(!exists) { res.writeHead(404, {"Content-Type": "text/plain"}); res.write("404 Not Found\n"); diff --git a/chapter-08/simple-chat/app.js b/chapter-08/simple-chat/app.js index fd9bb1d..dcd004e 100644 --- a/chapter-08/simple-chat/app.js +++ b/chapter-08/simple-chat/app.js @@ -4,9 +4,10 @@ */ var express = require('express') + , http = require('http') , Chat = require('./chat'); -var app = module.exports = express.createServer(); +var app = module.exports = express(); // Configuration @@ -102,9 +103,10 @@ app.get('/join/:id', function(req, res) { }); }); -app.listen(3000); +var server = http.createServer(app); +server.listen(3000); // Socket.io -require('./rooms')(app); +require('./rooms')(server); -console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); +console.log("Express server listening on port %d in %s mode", server.address().port, app.settings.env); diff --git a/chapter-08/simple-chat/package.json b/chapter-08/simple-chat/package.json index 46bdae1..ee8cf30 100644 --- a/chapter-08/simple-chat/package.json +++ b/chapter-08/simple-chat/package.json @@ -3,8 +3,8 @@ "version": "0.0.1", "private": true, "dependencies": { - "express": "~2.5.0", + "express": "~3.1.0", "jade": ">= 0.0.1", - "socket.io": "~0.8.7" + "socket.io": "~0.9.13" } } diff --git a/chapter-08/simple-chat/views/enter.jade b/chapter-08/simple-chat/views/enter.jade index 339a5d9..f2b7547 100644 --- a/chapter-08/simple-chat/views/enter.jade +++ b/chapter-08/simple-chat/views/enter.jade @@ -1,22 +1,25 @@ -- if (isSuccess) - h2 채팅방 목록 - p #{nickname}님 환영합니다. - p 원하는 채팅방이 없으면 채팅방을 만드세요. - form(action='/makeRoom', method='POST') - label(for='roomname') 방제 - input(type='text', id='roomname', name='roomname') - input(type='submit', value='방 만들기') - ul - each room in roomList - li= room - input(type='button', value='입장', - onclick='location.href=\'/join/' + room + '\''); -- else - - if (nickname === '') - script(type='text/javascript') - alert('잘못된 닉네임입니다.'); - history.go(-1); +extends layout + +block contents + - if (isSuccess) + h2 채팅방 목록 + p #{nickname}님 환영합니다. + p 원하는 채팅방이 없으면 채팅방을 만드세요. + form(action='/makeRoom', method='POST') + label(for='roomname') 방제 + input(type='text', id='roomname', name='roomname') + input(type='submit', value='방 만들기') + ul + each room in roomList + li= room + input(type='button', value='입장', + onclick='location.href=\'/join/' + room + '\''); - else - script(type='text/javascript') - alert('사용중인 닉네임입니다.'); - history.go(-1); + - if (nickname === '') + script(type='text/javascript') + alert('잘못된 닉네임입니다.'); + history.go(-1); + - else + script(type='text/javascript') + alert('사용중인 닉네임입니다.'); + history.go(-1); diff --git a/chapter-08/simple-chat/views/index.jade b/chapter-08/simple-chat/views/index.jade index 0c9f851..3893ab0 100644 --- a/chapter-08/simple-chat/views/index.jade +++ b/chapter-08/simple-chat/views/index.jade @@ -1,15 +1,18 @@ -h2 채팅방 -form(action='/enter', method='POST') - label(for='nickname') 닉네임을 입력해 주세요. - input(type='text', id='nickname', name='nickname') - input(type='submit', value='입장') +extends layout -script(type='text/javascript') - $(document).ready(function() { - $('form').submit(function(e) { - if ($.trim($('#nickname').val()) === '') { - alert('닉네임을 입력해 주세요.'); - return false; - } +block contents + h2 채팅방 + form(action='/enter', method='POST') + label(for='nickname') 닉네임을 입력해 주세요. + input(type='text', id='nickname', name='nickname') + input(type='submit', value='입장') + + script(type='text/javascript') + $(document).ready(function() { + $('form').submit(function(e) { + if ($.trim($('#nickname').val()) === '') { + alert('닉네임을 입력해 주세요.'); + return false; + } + }); }); - }); diff --git a/chapter-08/simple-chat/views/layout.jade b/chapter-08/simple-chat/views/layout.jade index a0d407b..f434f74 100644 --- a/chapter-08/simple-chat/views/layout.jade +++ b/chapter-08/simple-chat/views/layout.jade @@ -5,4 +5,5 @@ html link(rel='stylesheet', href='/stylesheets/style.css') script(type='text/javascript', src='/javascripts/jquery-1.7.0.min.js') script(type='text/javascript', src='/socket.io/socket.io.js') - body!= body + body + block contents diff --git a/chapter-08/simple-chat/views/makeRoom.jade b/chapter-08/simple-chat/views/makeRoom.jade index ce3fbf8..9136f83 100644 --- a/chapter-08/simple-chat/views/makeRoom.jade +++ b/chapter-08/simple-chat/views/makeRoom.jade @@ -1,12 +1,15 @@ -- if (isSuccess) - script - alert('방이 만들어졌습니다.'); - location.href = '/join/#{roomName}'; -- else if (roomName === '') - script - alert('방을 만들지 못했습니다.'); - location.href = '/enter'; -- else - script - alert('이미 존재하는 방입니다.'); - location.href = '/enter'; +extends layout + +block contents + - if (isSuccess) + script + alert('방이 만들어졌습니다.'); + location.href = '/join/#{roomName}'; + - else if (roomName === '') + script + alert('방을 만들지 못했습니다.'); + location.href = '/enter'; + - else + script + alert('이미 존재하는 방입니다.'); + location.href = '/enter'; diff --git a/chapter-08/simple-chat/views/room.jade b/chapter-08/simple-chat/views/room.jade index 0de5592..45d54e3 100644 --- a/chapter-08/simple-chat/views/room.jade +++ b/chapter-08/simple-chat/views/room.jade @@ -1,70 +1,73 @@ -- if (!isSuccess) - script - alert('방에 입장할 수 없습니다.'); - location.href = '/enter'; -- else - h3 방제 : - span#roomName= roomName - input#leave(type='button', value='나가기') - #chatWindow(style='width:400px; height:400px; overflow:auto; border:1px solid #000; float:left; margin-right:10px;') - - div(style='width:100px; height:400px; overflow:auto; border:1px solid #000;') - p 참가자 - ul#attendants - each attendant in attendants - li(id='attendant-'+attendant)= attendant - form - span#myName #{nickName} - input(type='text', style='width:300px;')#message - input(type='submit', value='보내기') +extends layout - script(type='text/javascript') - $(document).ready(function() { - var room = io.connect('/room'); - var chatWindow = $('#chatWindow'); - var messageBox = $('#message'); - var myName = $('#myName').text(); - var attendants = $('#attendants'); - var showMessage = function(msg) { - chatWindow.append($('

').text(msg)); - chatWindow.scrollTop(chatWindow.height()); - }; +block contents + - if (!isSuccess) + script + alert('방에 입장할 수 없습니다.'); + location.href = '/enter'; + - else + h3 방제 : + span#roomName= roomName + input#leave(type='button', value='나가기') + #chatWindow(style='width:400px; height:400px; overflow:auto; border:1px solid #000; float:left; margin-right:10px;') + + div(style='width:100px; height:400px; overflow:auto; border:1px solid #000;') + p 참가자 + ul#attendants + each attendant in attendants + li(id='attendant-'+attendant)= attendant + form + span#myName #{nickName} + input(type='text', style='width:300px;')#message + input(type='submit', value='보내기') - room.on('connect', function() { - room.emit('join', {roomName:$('#roomName').text(), nickName:myName}); - }); + script(type='text/javascript') + $(document).ready(function() { + var room = io.connect('/room'); + var chatWindow = $('#chatWindow'); + var messageBox = $('#message'); + var myName = $('#myName').text(); + var attendants = $('#attendants'); + var showMessage = function(msg) { + chatWindow.append($('

').text(msg)); + chatWindow.scrollTop(chatWindow.height()); + }; - room.on('joined', function(data) { - if(data.isSuccess) { - showMessage(data.nickName + '님이 입장하셨습니다.'); - attendants.append($('

  • ') - .attr('id', 'attendant-'+data.nickName) - .text(data.nickName)); - } - }); + room.on('connect', function() { + room.emit('join', {roomName:$('#roomName').text(), nickName:myName}); + }); - room.on('message', function(data) { - showMessage(data.nickName + ' : ' + data.msg); - }); + room.on('joined', function(data) { + if(data.isSuccess) { + showMessage(data.nickName + '님이 입장하셨습니다.'); + attendants.append($('
  • ') + .attr('id', 'attendant-'+data.nickName) + .text(data.nickName)); + } + }); - room.on('leaved', function(data) { - showMessage(data.nickName + '님이 나가셨습니다.'); - $('#attendant-'+data.nickName).remove(); - }); + room.on('message', function(data) { + showMessage(data.nickName + ' : ' + data.msg); + }); - $('form').submit(function(e) { - e.preventDefault(); - var msg = messageBox.val(); - if ($.trim(msg) !== '') { - showMessage(myName + ' : ' + msg); - room.json.send({nickName:myName, msg:msg}); - messageBox.val(''); - } - }); + room.on('leaved', function(data) { + showMessage(data.nickName + '님이 나가셨습니다.'); + $('#attendant-'+data.nickName).remove(); + }); + + $('form').submit(function(e) { + e.preventDefault(); + var msg = messageBox.val(); + if ($.trim(msg) !== '') { + showMessage(myName + ' : ' + msg); + room.json.send({nickName:myName, msg:msg}); + messageBox.val(''); + } + }); - $('#leave').click(function(e) { - room.emit('leave', {nickName:myName}); - location.href='/enter'; + $('#leave').click(function(e) { + room.emit('leave', {nickName:myName}); + location.href='/enter'; + }); }); - }); - + diff --git a/chapter-09/package.json b/chapter-09/package.json index 12da08a..3b65911 100644 --- a/chapter-09/package.json +++ b/chapter-09/package.json @@ -9,7 +9,7 @@ "node": "~0.4.10" }, "dependencies": { - "clog": "0.0.2" + "clog": "0.1.6" }, "devDependencies": {} } diff --git a/chapter-10/simple-vows/package.json b/chapter-10/simple-vows/package.json index af19113..f973488 100644 --- a/chapter-10/simple-vows/package.json +++ b/chapter-10/simple-vows/package.json @@ -9,7 +9,7 @@ "node": "~0.4.12" }, "dependencies": { - "vows": "~0.6.0" + "vows": "~0.7.0" }, "devDependencies": {} } diff --git a/chapter-10/webserver-expresso/package.json b/chapter-10/webserver-expresso/package.json index 24bed78..3bcb354 100644 --- a/chapter-10/webserver-expresso/package.json +++ b/chapter-10/webserver-expresso/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "express": "~2.4.7", - "jade": "~0.16.2" + "express": "~2.5.0", + "jade": ">= 0.0.1" } } diff --git a/chapter-10/webserver-expresso/views/index.jade b/chapter-10/webserver-expresso/views/index.jade index c9c35fa..dcf18da 100644 --- a/chapter-10/webserver-expresso/views/index.jade +++ b/chapter-10/webserver-expresso/views/index.jade @@ -1,2 +1,5 @@ -h1= title -p Welcome to #{title} \ No newline at end of file +extends layout + +block contents + h1= title + p Welcome to #{title} diff --git a/chapter-10/webserver-expresso/views/layout.jade b/chapter-10/webserver-expresso/views/layout.jade index 1a36941..c104427 100644 --- a/chapter-10/webserver-expresso/views/layout.jade +++ b/chapter-10/webserver-expresso/views/layout.jade @@ -3,4 +3,5 @@ html head title= title link(rel='stylesheet', href='/stylesheets/style.css') - body!= body \ No newline at end of file + body + block contents