발견된 오류&오타는 여기에 등록됩니다. 발견된 오타&오류는 증쇄할 때마다 수정됩니다. 예를 들어 1쇄 때 발견된 오류는 2쇄 때 수정돼서 판매됩니다. 전자책은 오타가 알아서 수정됩니다. 책이 몇 쇄인지에 관한 정보는 2쪽에서 보실 수 있습니다. 중대한 에러는 빨간 색으로 표시해두었습니다.
개정3판에서 수정될 내용은 https://github.com/ZeroCho/nodejs-book/issues 여기서 정리 중입니다.
버전 관련 문제는 여기 정리했습니다.
- mysql 8 버전을 설치하신 분은 설치할 때 legacy authentication을 체크(비밀번호 설정할 때 있습니다)해야 비밀번호 관련 에러가 안 납니다.
- 시퀄라이즈 5버전부터는 find가 작동하지 않기 때문에 findOne으로 수정하셔야 합니다. 또는 시퀄라이즈 4버전을 설치하시면 됩니다.
- 몽구스6버전에서는 update, remove가 제거되었습니다. updateOne, updateMany, deleteOne, deleteMany를 사용하세요.
여기 아래는 개정2판의 수정사항입니다.
- 책에서 socket.io@2 버전을 설치해야 문제가 없습니다. socket.io@4 버전 코드는 깃헙 socket.io@4 브랜치에 있습니다.
- bcrypt 5.0.1이랑 node.js 15가 호환이 안 되는 문제가 있습니다. 이 때는 node.js 14 설치하세요.
- 16장 서버리스 이미지들과 S3 권한 부분도 달라졌지만, 모든 이미지를 수정할 수가 없어 글로 설명드립니다. 버킷에 퍼블릭 정책이 있는 경우, 퍼블릭 액세스 계정 및 계정간 액세스 차단 옵션의 체크를 해제해주셔야 합니다.
- 앞으로 개정판에서 수정되는 사항은 깃헙에서 모아서 다루겠습니다. closed된 issue도 한 번 살펴보세요.
- https://github.com/ZeroCho/nodejs-book/issues
아래는 초판 수정사항입니다.
4쇄에서 미처 수정되지 못한 사항
- 151쪽 restServer 대신 restFront.html, restFront.css, restFront.js입니다.
- 226쪽 development(개발 환경)인 경우에만
- 328쪽 몽구스가 생성하는 쿼리 내용을 개발환경일 때만 콘솔을 통해 확인할 수 있게 하는 코드입니다.
- 444쪽 default: 10 뒤에 콤마 붙이기
4쇄에서 수정된 사항
- bcrypt@3.0.7 사용하기
- 시퀄라이즈 모든 find -> findOne
- +new Date()나 new Date().valueOf()를 Date.now()로 수정
- 199쪽 body-parser 요청의 분문 -> 요청의 본문
- 200쪽 cookie-parser 설명 명확하게 수정
- 201 / 6.3.5 static절 styles.css -> style.css
- 292 include 옵션에서 models 속성에는 -> include 옵션에서 model 속성에는
- 363 6.6.3절 -> 7.6.3절
- 400 where: { id: req.user && req.user.id || null } 로 수정(시퀄라이즈는 where에 undefined 허용 안 함)
- 451 달려졌 -> 달라졌
- 546, 555쪽 meta chart -> meta charset
3쇄에서 수정된 사항
- 목차 encodeURLComponent, decodeURLComponent가 아니라 encodeURIComponent, decodeURIComponent입니다.
- 138쪽 보라색 선이 쿠키를 가지지 않은 상태고, 검은 선이 쿠키를 가진 상태입니다.
- 144쪽 쿠키 파싱 코드가 이해를 돕기 위해 간소화되었습니다. 링크 참조
- 익스프레스 에러 핸들러의 매개변수는 err, req, res, next 네 개여야 합니다. 또한 11, 12, 13장의 views 폴더에 9장 views/error.pug를 복사해서 넣어주세요.
- 239쪽 brew install mysql@5.7
- 239쪽 우분투 GVI -> 우분투 GUI, sudo apt-get install mysql-server-5.7
- 279쪽 tag.setPosts 대신 tag.addPosts (setPosts해도 되긴 합니다만, addPosts는 등록, setPosts는 수정의 의미가 강합니다)
- 272쪽 models 폴더 내 파일들을 만들 때, 한글 에러가 난다면 15.1.2를 참고하여 collate와 charset 옵션을 추가하세요. 기존에 테이블을 만드셨던 분들은 데이터베이스 테이블을 지우고 다시 서버를 실행하셔야 합니다. 시퀄라이즈 모델을 수정한다고 데이터베이스가 자동으로 변경되지 않습니다.
- [].forEach.call 또는 Array.prototype.forEach.call 코드들을 그냥 document.querySelectorAll().forEach로 수정합니다. querySelectorAll은 forEach를 지원합니다. IE에서는 forEach가 안 돼서 예전 코드로 하셔야 합니다.
- 360쪽 email 옵션의 allowNull을 true로 수정합니다. 카카오가 더는 이메일을 필수로 제공하지 않습니다. 기존에 false로 하셨던 분들은 데이터베이스 테이블을 지우고 다시 서버를 실행하셔야 합니다. 시퀄라이즈 모델을 수정한다고 데이터베이스가 자동으로 변경되지 않습니다.
- 365쪽 const pageRouter = require('./routes/page')입니다.
- 412쪽 마지막 줄 "이 부분은 다음 절에서 작성합니다"가 다음 절에 없기 때문에 이 코드 를 참조해서 수정해주세요.
- 414쪽 const request = async (req, api) => { 부분의 윗줄 공백에 axios.defaults.headers.origin = 'http://localhost:8003'을 추가하는 게 좋습니다(책 내용 흐름만으로는 에러가 나지 않지만 nodebird-call의 다른 라우터에 접근할 때 문제가 될 수 있습니다). 위 항목 링크를 참조하세요.
- 426쪽 http://localhost:/8003 -> http://localhost:8003
- 475쪽 package.json scripts의 start 속성 끝에 콤마 제거(JSON은 끝 콤마를 허용 안 합니다)
- 588쪽 sudo i -g n -> sudo npm i -g n
2쇄에서 수정된 사항
- 33p 첫 줄 알아보겠습다. -> 알아보겠습니다.
- 145쪽 두 번째 줄 charset:utf-8 -> charset=utf-8
- 185쪽 두 번째 줄 packgage.json -> package.json
- 352쪽 -const isFollowing 부분 코드가 -const follow = user && user.Followings.map(f => f.id).includes(twit.user.id);
if user && user.id !== twit.user.id && !follow로 수정되었습니다. - 444쪽 room.js 코드 defaultValue: 10 -> default: 10
- 493쪽 socket.js 코드 오류입니다. https://github.com/ZeroCho/nodejs-book/blob/master/ch12/12.3/node-auction/socket.js로 수정하시거나, socket.js의 코드 부분을 app.js의 마지막에 붙여 넣으세요.(이 경우, webSocket(server, app)은 지우세요)
- 7월 16일부로 Google Maps Platform이 유료가 됨에 따라 13장 node-place는 15.5의 결제 계정 등록(node-place에 결제 계정을 등록합니다)이 필요하게 되었습니다. (결제 계정만 등록할 뿐 무료 200$를 주긴 합니다)