게시글

etc - 3년 전 등록 / 25일 전 수정

Node.js 교과서 질의응답용 포스트

FAQ

  • 스스로 해보기 풀이는 없나요? - 유튜브나 인프런 강좌에서 제공합니다(인프런에서도 무료로 보실 수 있습니다.)
  • 오타&오류 정오표는 어디에 있나요? - 이 링크를 클릭하세요. 
  • 이미지 말고 다른 파일을 업로드하려면 어떡하나요? - multer로 다른 파일 형식도 업로드 가능합니다(동영상, 문서 등등).
  • pug 스타일이 너무 싫어요 ㅠㅠ - ejs나 다른 걸로 바꾸시면 됩니다. pug는 제 책에서 중요한 부분이 아닙니다. 그저 지면을 아끼기 위해 선택했을 뿐이에요.
  • bcrypt가 윈도에서 안 깔려요. - bcrypt 문서에 윈도에서 bcrypt 설치하는 방법에 대해 나와 있습니다. 3버전부터는 그렇게 적용하셔야 합니다. node.js 15랑 호환이 안 되는 문제가 있어 node.js 14를 설치하시는 게 좋습니다.
  • user && twit && twit.Liker.map(l => l.id).includes(user.id) 이 부분에서 에러가 나신다면, user && twit && twit.Liker && twit.Liker.map으로 바꿔주세요.
  • 시퀄라이즈 5버전에서 WHERE parameter "id" has invalid "undefined" value 문제는 https://github.com/ZeroCho/nodejs-book/issues/42 참고하세요
  • TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Set-Cookie"] 에러 발생하시는 분은 Expires 앞에 줄바꿈을 제거해주세요. 줄바꿈 문자가 들어가면 안 됩니다.
  • socket.io@2 버전을 설치하셔야 req.session이 없는 문제 등이 발생하지 않습니다. socket.io@4 코드는 깃헙에 socket.io@4 브랜치에 있습니다.
  • mysql 8 버전 설치 시 legacy authentication을 체크하셔야 비밀번호 관련 에러가 발생하지 않습니다. 추가로 이것도 보세요. https://github.com/ZeroCho/nodejs-book/issues/45 

다른 질문은 댓글로 입력해주세요. 또는 길벗 공식 홈페이지에 문의를 남겨주시면 됩니다.

조회수:
0
목록
투표로 게시글에 관해 피드백을 해주시면 게시글 수정 시 반영됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright 2016- . 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.

댓글

105개의 댓글이 있습니다.
2일 전
안녕하세요 nodejs 교과서 보면서 공부중인 학생입니다.
시퀄라이즈를 사용하는데 쿼리문과는 읽는 방식이 조금 다른 것 같아 질문드립니다.
select distinct(Table_num),Table_cnt from orders,stores where orders.store_code = stores.store_code and stores.Nick = 'Jhon';
해당 쿼리문을 시퀄라이즈로 어떻게 변형해야 하나요?
시퀄라이즈를 사용하니 필요없는 컬럼명까지 select가 되어서 자꾸 에러가 발생하여 질문 드립니다.
하루 전
attributes: [
Sequelize.fn('DISTINCT', Sequelize.col('Table_num')), 'Table_cnt'
],
이런 옵션이 있습니다.
한 달 전
선생님 언제나 댓글 감사합니다. mysql를 위해 sequelize를 쓸때 migrations 폴더도 생기는데 이 폴더는 언제 쓰는 것이고 정체가 무엇인가요?
한 달 전
db 컬럼 변경이나 테이블 변경 사항을 코드로 처리할 때 작성하는 코드를 모아두는 폴더입니다.
한 달 전
안녕하세요. passport를 쓰지 않고 JWT 토큰으로만 로그인 인증을 구현하면 간단할 것 같은데 혹시 그러지 않는 이유가 있나요?
한 달 전
토큰 인증이 쿠키에 비해 훨씬 더 복잡합니다.
2달 전
node.js 교과서 개정2판 457p 중간에 위치한 '다음은 도메인을 등록하는 화면입니다 ......' 문단의 위치가 흐름에 맞지 않습니다. 큰 결함은 아니지만 개정 3판이 나올수도 있으니까... 글 올려봅니다.
2달 전
안녕하세요. node 교과서 보며 잘 공부하고 있습니다.
한가지 궁금한 점이 책 9장에 있는 passport 관련 소스코드를 참고해서 배포용 프로그램에 적용시킬 예정인데, 라우팅 방법이나 암호화 방법 등 교재 내용 대부분을 실제로 사용해도 무방할까요?
2달 전
네 그대로 쓰셔도 됩니다. https만 추가로 적용하시면 됩니다.
2달 전
그러면 app.js 에 app.use -> session -> cookie 에서 {httpOnly: true, secure: true,} 이런식으로 설정하면 될까요?? 감사합니다
2달 전
교재 9.3절 카카오 로그인 구현중입니다...
'카카오톡' 버튼을 클릭하면
Field 'password' doesn't have a default value
이런 오류가 떠서 깃허브에 9.3절에 나오는 코드들을 그대로 옮겨서 해봤더니. 또 같은 오류가 발생하네요...
어떤 문제인지 감이 안잡혀요.... ㅠㅠ
카카오 developer 로그인 동의항목에서는 프로필정보, 카카오계정(이메일)를 동의했습니다.

그리고 회원가입하면
Support for `{where: 'raw query'}` has been removed. 이렇게 나오는데 왜 그러는 걸까요?
2달 전
models/user.js에서 password가 allowNull: true가 아닌가요? allowNull: false로 되어있다면 비밀번호가 필수값이 되어버립니다. allowNull: true로 바꾸고 테이블 지웠다 다시 만드세요.
2달 전
해결했습니다. DB를 통째로 삭제했다가 다시 만드니까 해결이 됐네요... 제 생각엔 PC 카톡에 로그인 되어있어서 이거나 developer.kakao 에 로그인 되어있는 상태라서 그랬던 것 같습니다.
2달 전
p.s. Support for `{where: 'raw query'}` has been removed. 에러는 철자 오류였습니다.
2달 전
안녕하세요,
시퀄라이즈에서 findOne 할 때 const exUser = await User.findOne({ where: { email } });
이부분에서 에러가 나는데 혹시 왜 그런지 아실까요??

error-> [0] TypeError: Cannot convert undefined or null to object

콘솔로 User를 찍으면 그냥 User라고 나오는데 제대로 못 가져온 걸까요?
2달 전
User가 undefined가 아니라면 email이 undefined같네요.
2달 전
안녕하세요. 12장 웹소켓으로 실시간 데이터 전송하기를 보고 채팅을 만들었는데 Chat.create를 6번 연속하면 서버가 멈추고 재시작하면 멈췄을때 입력했던 값이 무작위로 create 되는데 해결 방법을 알 수 있을까요??
2달 전
socket.io 3버전을 쓰셨나요?
2달 전
안녕하세요, 개정판 잘 보고 있습니다. 혹시 socket.io 라이브러리 3.0버전으로 깃허브 코드 수정예정은 없으신가요? gif 채팅방이랑 경매장 둘다 socket.io를 3버전으로 하게되면 안되는 부분이 있네요.
2달 전
다음판 나오기 전까지는 master브랜치는 2버전으로 할 수밖에 없습니다. 기존 2버전으로 쓰신 분들이 많으셔서요. 별도로 브랜치를 파서 코드를 올리긴 하겠습니다.
2달 전
안녕하세요. 9장에서 nodebird를 구현하면서 pug를 작성 할 때, 값의 전달에 대해 궁금한 점이 있습니다. layout.pug의 body부분을 보면 [ if user && user.id ] 이라는 구문이 있는데, 이때 user라는 값은 어디서 어떻게 가져오는건가요? script로 불러오는것도 아닌데, 페이지를 구성할 때 어떻게 user의 값이 가져와 지는지 궁금합니다. 제 생각으로는 세션에 접근해서 가져오는것으로 파악이 되는데, passport를 구현할 때, session으로 넘기는 값은 user.id만을 넘기는데, 그 이후에 user.Followings 등등으로 user에 담긴 모든값을 가져오는게 도저히 이해가 되질 않습니다. 따로 user.id를 이용해 값을 가져오는 function을 작성한것도 아닌데, 어떻게 user의 모든 값이 담겨져 있는건가요??
2달 전
res.render('템플릿이름', { user: 값 }) 하면 user가 pug로 전달됩니다. res.locals.user = 값 해도 전달되고요.
3달 전
안녕하세요. 노드 교과서를 읽다가 이해가지 않는 부분이 있어 질문 남깁니다. 교재 303페이지에 보면, "INDEX commenter_idx (commenter ASC)" 부분이 있는데 이는 그저 commenter를 트리 구조에 저장할 때 자식 노드의 왼쪽부터 가장 작은 값들을 채워나가겠다는 의미인가요? 아래에 부연 설명에는 "다른 테이블의 기본 키이므로 commenter 컬럼에 인덱스도 걸어봤습니다."라고 되어 있는데, 정확하게 무슨 목적으로 인덱스를 걸었다는 것인지 알 수 없네요. 구글에 mysql index 관련한 글들을 찾아봤는데 교재에서 쓰인 index와 같은 것을 의미하는 건지 모르겠네요.. 참고 사이트나 추가 설명을 부탁드려도 될까요?
3달 전
INDEX는 db에서 값을 빠르게 찾기 위해 적용하는 것이고요. mysql index와 같은 겁니다. commenter_idx는 단순한 인덱스의 이름일 뿐이고요. commenter ASC는 commenter값들을 오름차순으로 정렬해서 보관하겠다는 의미입니다. 찾을 때 오름차순으로 찾으려고요.
3달 전
안녕하세요. 현재 개정 2판 2쇄를 공부하고 있는데, 12장의 561쪽에서 코드에서 io.use 부분에

cookieParser(req,res,next);
sessionMiddleware(req,res,next);

위의 형태로 미들웨어를 작성하셨는데, 이처럼 작성하게 되면 cookieParser부분에서 내부적으로 next를 호출하여 sesionMiddleware가 아닌 다음 미들웨어로 넘어가게 되지않나요?

만약 이것을 의도하신 것이라면 어떠한 흐름으로 이해해야하는지 여쭤보고 싶습니다.
3달 전
어차피 여기서는 req객체에 session을 등록하는게 주요 일입니다. 미들웨어이기 이전에 자바스크립트 함수라는 것을 기억하세요. return이 없는 이상 다 실행됩니다. cookieParser랑 sessionMiddleware는 둘 다 실행되고 next도 두 번 호출됩니다.
3달 전
node.js 교과서 9장을 마무리하고 스스로 해보기를 하고 있습니다. 팔로잉 끊기를 하는데 책에는 시퀄라이즈 destroy메서드와 라우터를 활용 하라고 되어 있는데 유튜브 강좌에선 removeFollwing으로 구현되어 있어 질문 드립니다. destroy를 사용해 구현 해 보고 싶어 고민 해 보았는데 시퀄라이즈로 생긴 관계 테이블 follow에서 dreq.user.id와 req.params.id가 있는 row를 삭제하면 된다고 생각하였습니다. 그런데 자바스크립트에서 어떻게 follow 테이블 모델을 불러와야 하는지 모르겠습니다. ㅜㅜ 워크벤치로 보면 테이블이 생성 되어 있는데 이것을 어떻게 불러 와야 할까요? 이 과정을 간단히 해 주는게 removeFollowing 메소드인가요?
3달 전
db.sequelize.models.follow로 follow 테이블에 접근가능합니다. removeFollowing은 follow 테이블에 접근하지 않고도 지울 수 있게 해줍니다.
3달 전
안녕하세요, 교재와 강의를 보며 세션을 공부하던 중 잘 안되는 부분이 있어 질문합니다.

const session = require('express-session');

// ...

app.get('/session/clear', (req, res) => {
req.session.destroy();
res.send('세션을 비웠습니다.');
});

이 라우터를 실행한 후,

app.get('/session/view', (req, res) => {
if (req.session.id) {
res.send(`현재 세션에 저장된 id 값은 "${req.session.id}" 입니다.`);
} else {
res.send('현재 세션에 id값이 저장되어 있지 않습니다.');
}
});

이 라우터를 실행하면 else 에 있는 값으로 response 가야하지 않나요?
req.session.destroy(); 를 아무리 실행해봐도 req.session.id에 무언가 값이 계속 출력되네요. 제가 뭔가 잘못 이해하고 있는걸까요?
3달 전
자답합니다.
https://www.npmjs.com/package/express-session
이 문서의 req.session.id 부분을 살펴봤는데요,
req.session.id 랑 req.sessionID 가 동일한 것을 의미한다고 합니다.
그래서 예약어(?)같은 거라서 값을 삭제해도 계속 있다고 판단했던 것이었네요.
질문 삭제하려다가 혹시나 같은 의문점을 가지는 분이 계실까봐 남겨둡니다.
감사합니다!!
3달 전
안녕하세요 책을 보며 node.js를 공부하고 있는 독자입니다 9장의 데이터베이스를 세팅하고나서 서버를 실행할 때 [nodemon] app crashed - waiting for file changes before starting...이라는 에러 메세지가 뜨는데요 아무리 구글링을 해도 해결법이 안 나와서 질문드립니다 해결 방법이 없을까요? 그 위엔 Cannot find module 'sequelize/types'라는 에러문구가 있습니다. 이것과 연관이 있을까요?
3달 전
npm i sequelize 하세요.
3달 전
npm i sequelize해도 해결이 안 되네요..
3달 전
그럼 그 다음 에러를 알려주셔야 합니다
3달 전
안녕하세요 제로초님 책을 보며 처음 노드를 공부하는 학생입니다.책 15장에서 11장의 코드들을 가져와서 npm을 추가해서 사용하는데 cross-env를 설치하고 실행하니
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
이런 메세지가 띄워지고 실행은 됩니다
ch11에서는 뜨지않는 메세지가 ch15에서는 갑자기 띄워져서 그런데 혹시 이유를 알 수 있을까요?
에러가 발생한 것이라면 알려주시면 감사하겠습니다
3달 전
express-session은 기본적으로 메모리스토어를 사용하는데 이건 실무에서 쓰기 적합하지 않습니다. 그래서 redis-store를 적용하곤 합니다. 15장 connect-redis 챕터에서 보실 수 있습니다.
3달 전
안녕하세요. 책 잘 보고 있습니다. 도중 궁금한 점이 생겨 질문 남깁니다. 책 191page에 cookie.js 예제를 다음과 같이 바꿔봤는데요, 새로고침을 할 때마다 cnt가 2씩 증가하는 것을 확인했습니다. 도무지 이해가 안가네요 ㅠㅠ 설명이나 참고할 만한 자료를 주실 수 있을까요?

[cookie.js]
const http = require('http');

let cnt = 1;

http.createServer((req, res) => {
console.log(req.url, req.headers.cookie);
res.writeHead(200, {'Set-Cookie': ['name=jsjs', 'testkey=testvalue']});
res.end(`Hello Cookie ${cnt}`);
cnt++;
})
.listen(8083, () => {
console.log('8083번 포트에서 서버 대기 중입니다.');
});
3달 전
console.log(req.url, req.headers.cookie) 부분도 두 번 찍히지 않나요? chrome에서는 자동으로 기본 요청 외에도 /favicon.ico라는 요청을 보냅니다
3달 전
아래 질문 댓글 작성한 사람입니다. 언급한 영상의 소스코드의 흐름을 한글로 작성해봤는데, 제가 정확히 이해한 것인지 확인해주실 수 있나요? 아래 글 기준으로 17, 17-1번 과정이 모호합니다. 감사합니다.
/* [Application Flow]
* 1. 호출 스택에 anonymous를 push한다.(stack=1)
* 2. 호출 스택에 setTimeout을 push한다.(stack=2)
* 3. 프로그램 명령어가 끝났으니 setTimeout(stack.top)을 실행한다.
* 3-1. 백그라운드에 (run, 5초) 명령을 입력한다. 그리고 호출 스택에서 setTimeout이 pop된다.(stack=1)
* 4. anonymous도 pop되고 호출 스택은 빈 상태가 된다.(stack=0)
* 5. 5초가 지난 후 백그라운드의 run함수가 태스크 큐로 이동한다.
* 6. 호출 스택이 비어 있으므로 태스크 큐의 run 함수가 호출 스택으로 push된 후 실행한다.(stack=1)
* 7. run(): console.log('run run');이 호출 스택으로 push되고 콘솔 출력 후 pop된다.(stack=1->2->1)
* 8. run(): 호출 스택에 setTimeout을 push한다.(stack=2)
* 8-1. run(): 백그라운드에 (익명, 0초) 명령을 입력한다. 그리고 호출 스택에서 setTimeout이 pop된다.(stack=1)
* 9. run(): 호출 스택에 Promise객체가 push된다.(stack=2)
* 10. run(): 호출 스택에 resolve('hi')가 push된다.(stack=3)
* 11. run(): 호출 스택에 then()이 push된다.(stack=4)
* 11-1. run(): 백그라운드에 (then console.log('hi')) 명령을 입력한다. 그리고 호출 스택에서 then()이 pop된다.(stack=3)
* 12. run(): resolve('hi')와 Promise객체가 pop된다.(stack=1)
* 13. run(): 호출 스택에 oneMore()가 push된다.(stack=2)
* 14. oneMore(): console.log('one more');이 호출 스택으로 push되고 콘솔 출력 후 pop된다.(stack=2->3->2)
* 15. oneMore()의 실행이 끝났으니 호출 스택에서 pop한다.(stack=1)
* 16. run()의 실행이 끝났으니 호출 스택에서 pop한다.(stack=0)
* 17. 백그라운드의 (익명, 0초), (then console.log('hi')) 두 함수는 당장 실행 조건에 만족하므로, 태스크 큐로 이동한다.
* 17-1. 하지만 then이 우선순위를 가지므로 태스크 큐에서 먼저 호출 스택으로 이동하며, 익명 함수는 나중에 이동한다.
* 18. 차례대로 호출 스택으로 이동되어 push -> 실행 -> pop을 반복한다.
* 19. 호출 스택, 백그라운드, 태스크 큐가 모두 빈 상태가 되면 JavaScript 실행이 완료된다.
*/
3달 전
안녕하세요. Node.js교과서 독자입니다. 책을 보다가 이벤트 루프 부분에 모르는 것이 생겨서 유튜브에 강의를 보고, 또 이해가지 않는 부분이 생겨 질문합니다. [노드교과서 개정판 2-2. 이벤트 루프 알아보기]: 이 영상의 중간 이후부터 나오는 소스코드에 대한 질문입니다. 백그라운드에 타이머(익명, 0)과 then() 함수가 들어가있을때, "호출 스택이 비어있는 상태에서만 백그라운드에서 우선순위를 고려해서 태스크 큐로 넘어가는 건지", "백그라운드에서 시간 또는 종료 조건이 만족되면 바로 태스크 큐로 각자 넘어갔다가 태스크 큐 내에서 우선순위를 고려해 호출 스택으로 넘어가는 건지"에 대한 순차적이고 정확한 과정을 자세히 알고 싶습니다. 책에는 없는 내용이라 이런 점은 조금 아쉽네요 ㅠㅠ 하지만 대체로 만족스럽게 공부하고 있습니다. 감사합니다!!
3달 전
잘 생각해보시면 전자든 후자든 아무 차이가 없습니다. 두 가지 모두 생각해보시면 어떤 것이든 결과가 똑같습니다.
3달 전
안녕하세요 제로초님의 책을 보고 처음 노드를 배우는 학생입니다.다름이 아니라
채팅방 생성하고 나가기 시에 에러가 발생합니다
12.6장 부터 에러가 발생하는데
TypeError: Cannot read property 'color' of undefined
이 에러가 우선 발생하였고
저건 채팅방에 메시지 띄우는 거라서 우선 실행이 잘 되는지 확인하기 위해서 주석처리를 하고 실행을 시켰습니다. 그 후에 잘 되는가 싶더니
TypeError: Cannot read property 'connect.sid' of undefined
이런 에러가 나왔습니다. 이 에러는 방을 나가기 할 시에 발생하였습니다.
제 생각에는 둘 다 세션이나 쿠키 관련해서 문제가 생기는 것 같아 구글링도 해보았고 여러가지 찾아본다고 해봤지만 수정할 수 있는 것이 없었습니다.
여기서 또 이상한 문제는 제가 핸드폰을 이용하여 들어갔을 시에는 나가기를 해도 정상 작동이 되었고 제 컴퓨터를 이용할 시에만 에러가 발생한다는 것이었습니다.
혹시 제가 책을보며 따라한 코드가 잘못됐을 수도 있어서 제로초님의 깃허브에 있는 코드를 그대로 들고도 와 봤지만 마찬가지로 같은 에러가 발생하였습니다.
어떻게 하면 해결할 수 있을지 알 수 있을까요??
3달 전
socket.io 3버전을 설치하신 것 같네요. 2버전을 설치해보세요.
4달 전
12장에서 채팅방은 잘 구현이 되었는데요, 채팅을 전송하면 바로 채팅창에 뜨지 않고 새로고침을 한 번 눌러야 채팅창에 뜨더군요. 전송하면 바로 채팅창에 뜨게 하려면 어떻게 해야 하나요?
4달 전
책 소스코드를 그대로 따라 치시면 원래 새로고침을 누르지 않아도 뜨는 것이 맞습니다. github.com/zerocho/nodejs-book 소스 코드를 참고하셔도 됩니다.
4달 전
채팅 생성 과정 중
Cannot read property 'length' of undefined 에러가 발생하는데 main.pug의
tbody
for room in rooms
tr(data-id= room._id)
td=room.title
td= room.password ? '비밀방' : '공개방'
td=room.max
td(style='color:' + room.owner)=room.owner
-var password = room.password ? 'true' : 'false';
td:button(data-password=password data-id=room._id).join-btn 입장
for room in rooms에 문제가 있다는데 책을 아무리봐도 어떤 에러인지모르겠습니다 ㅠㅠ 구글에 찾아보니까 라우터를 잘못해줘서 그럴수도 있다는데 도저히 해결이 안되어 질문올립니다.
4달 전
room이 undefined일 수도 있습니다. 라우터에서 console.log(rooms) 해보세요
4달 전
rooms가 정의 안되어있다고 뜹니다 ㅠㅠ
4달 전
Unknown column 'Auction.GoodId' in 'field list'
SequelizeDatabaseError: Unknown column 'Auction.GoodId' in 'field list'
at Query.formatError (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\sequelize\lib\dialects\mysql\query.js:247:16)
at Query.handler [as onResult] (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\sequelize\lib\dialects\mysql\query.js:68:23)
at Query.execute (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\mysql2\lib\commands\command.js:30:14)
at Connection.handlePacket (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\mysql2\lib\connection.js:408:32)
at PacketParser.onPacket (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\mysql2\lib\connection.js:70:12)
at PacketParser.executeStart (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\mysql2\lib\packet_parser.js:75:16)
at Socket.<anonymous> (C:\Users\user\대학\웹서버프로그래밍\node-auction-test\node_modules\mysql2\lib\connection.js:77:25)
at Socket.emit (events.js:314:20)
at addChunk (_stream_readable.js:298:12)
at readableAddChunk (_stream_readable.js:273:9)
at Socket.Readable.push (_stream_readable.js:214:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23)

안녕하세요 경매장 시스템 진행 중에 에러가 나서 문의드립니다.
로그인 이후 경매장 상품 등록 후 채팅방에 입장하면 이러한 에러가 납니다.
현재 auction 테이블엔 아무것도 저장되어 있지 않습니다.
4달 전
테이블이 잘못 생성된 것입니다. 워크벤치로 Auction 테이블을 지웠다가 서버를 재시작해서 다시 생성해보세요.
4달 전
감사합니다.
4달 전
채팅생성하기 누르면 Not found에러가 뜨는데 app.js부분이 잘못된걸까요?
4달 전
라우터가 app.js에 제대로 연결이 안 되어 있는 것 같습니다.
4달 전
시퀄라이즈 npx sequelize db:create 에러 문제가 있습니다.

config.json내용을 입력하고
npx sequelize db:create를 하면 다음과 같은 에러가 뜹니다.

ERROR: Access denied for user 'root'@'localhost' (using password: YES)

제가 알기로 저 에러는 비밀번호가 틀렸을 때 나오는 에런데

cmd를 켜서 mysql -u root -p를 한 후에 똑같은 비밀번호를 입력하면 잘 작동합니다.

이를 어떻게 해결할 수 있을지 궁금합니다. ㅜㅜ 오늘 하루 종일 헤맸네요
4달 전
https://github.com/ZeroCho/nodejs-book/issues/45
이것을 적용해보세요.
4달 전
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '비밀번호';
입력했는데 똑같은 오류가 뜹니다 ㅜㅜ

이거 진짜 멘붕이네요.

cmd에선 비밀번호가 되는데 왜 config에선 안될까요 ㅜㅜ
4달 전
BY '비밀번호'에 질문자님 비밀번호를 입력하셨는데 안 되는 건가요? MYSQL은 몇 버전을 설치하셨나요?
4달 전
네 그렇습니다. 8.0.22버전입니다.
4달 전
도대체 왜 안되는 건지 모르겠습니다.

cmd에서는 비밀번호가 잘 동작하는데요 ㅜㅜ
4달 전
혹시 .env 파일에 세미콜론을 붙이거나 따옴표로 감싸거나 하지는 않으셨나요? config/config.json에서도요.
4달 전
네 않았습니다ㅜㅜㅜㅜㅜ 진짜 이거때문에 진도를 못나가는게 너무 슬프네요. 어떻게 해결하지..
4달 전
책 잘 보고있습니다. 8장의 몽고DB 연결하는 부분을 공부하고 있는데, User를 추가하는 것은 잘 되고 있으나 Comment부분이 전혀 되지 않고 있습니다. 완성된 페이지에서도 DB에 zero로 등록해둔 댓글이 보이지 않고 페이지에서 새로 추가하는것도 되지 않습니다. 코드는 책에 있는 것도 해보고 깃허브에 올려주신 것도 해보았으나 되지 않네요. 오류는 다음과 같습니다

Error: Comment validation failed: commenter: Cast to ObjectId failed for value "aaa" at path "commenter"
at ValidationError.inspect (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\error\validation.js:47:26)
at internal/per_context/primordials.js:23:32
at formatValue (internal/util/inspect.js:774:19)
at inspect (internal/util/inspect.js:336:10)
at formatWithOptionsInternal (internal/util/inspect.js:2006:40)
at formatWithOptions (internal/util/inspect.js:1888:10)
at console.value (internal/console/constructor.js:320:14)
at console.warn (internal/console/constructor.js:353:61)
at C:\Users\이상협\pproject\myapp\learn-mongoose\routes\comments.js:16:13
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
errors: {
commenter: CastError: Cast to ObjectId failed for value "aaa" at path "commenter"
at ObjectId.cast (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\schema\objectid.js:281:11)
at ObjectId.SchemaType.applySetters (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\schematype.js:1110:12)
at model.$set (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\document.js:1261:20)
at model.$set (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\document.js:1010:16)
at model.Document (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\document.js:150:12)
at model.Model (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:105:12)
at new model (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:4689:15)
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3055:22
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3091:7
at Array.forEach (<anonymous>)
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3090:15
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:5
at new Promise (<anonymous>)
at promiseOrCallback (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\helpers\promiseOrCallback.js:30:10)
at Mongoose._promiseOrCallback (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\index.js:1135:10)
at Function.create (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3025:23) {
stringValue: '"aaa"',
messageFormat: undefined,
kind: 'ObjectId',
value: 'aaa',
path: 'commenter',
reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\bson\lib\bson\objectid.js:59:11)
at castObjectId (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\cast\objectid.js:25:12)
at ObjectId.cast (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\schema\objectid.js:279:12)
at ObjectId.SchemaType.applySetters (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\schematype.js:1110:12)
at model.$set (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\document.js:1261:20)
at model.$set (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\document.js:1010:16)
at model.Document (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\document.js:150:12)
at model.Model (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:105:12)
at new model (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:4689:15)
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3055:22
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3091:7
at Array.forEach (<anonymous>)
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\model.js:3090:15
at C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:5
at new Promise (<anonymous>)
at promiseOrCallback (C:\Users\이상협\pproject\myapp\learn-mongoose\node_modules\mongoose\lib\helpers\promiseOrCallback.js:30:10)
}
},
_message: 'Comment validation failed'
}
POST /comments 500 9.167 ms - 1939

이유를 알 수 있을까요..?
4달 전
ObjectId 형식의 문자열을 넣어야 하는 자리에 aaa라는 임의의 문자열을 넣으신 것 같습니다.
4달 전
책 잘 보았습니다!! passport 모듈을 사용해 웹사이트를 만들고 aws로 배포를 했습니다. 로컬에서 테스트 했을 때는 잘 동작하는데 배포 후에는 작동이 되지 않습니다. 쿠키 확인을 해 보았더니 생성 자체가 되지 않았고, console.log로 찍어보니 serialize는 되는데 deserialize가 되지 않습니다. 왜 이럴까요?
4달 전
CORS관련 설정 하셨나요??
4달 전
네 했습니다. 구글링해서 나오는 결과대로 다 설정했는데 안됩니다ㅠㅠ
4달 전
네 했습니다. cors 설정해서 로컬에서는 잘 작동하는데 배포 후에만 작동하지 않아요 구글링해서 나오는 결과대로 설정도 했는데 안됩니다ㅠㅠ
5달 전
개정판 전자책 810페이지에 res.status(419).json({
code: 419});

이러한 코드가 있는데 status(419)와 code:419의 차이는 무엇인가요?
status는 헤더에 저자되고 json에 설정한건 body에 code 키로 저장되는 건가요??
5달 전
"Node.js교과서" 4-2장의 예제 server4.js에서 궁금한것이 있습니다.
parseCookies 함수 선언부에서, const parseCookies = (cookie ='')=>{실행문} 이렇게 하면 에러가 나는데 왜 그럴까요? ( 교재에는 중괄호가 없습니다. 하지만 있어도 된다고 생각했는데...안되더라구요. )
5달 전
중괄호를 생략하는 문법은 실행문의 return도 생략되어 있는 것과 같습니다. 중괄호를 붙이면 실행문 앞에 return 붙여주셔야 합니다.
5달 전
유튜브랑 인프런에서 스스로 해보기 풀이를 찾지 못하겠습니다. 6장까지만 제공되는 건가요?
5달 전
초판 재생목록에 있었네요. 최근 재생목록으로 옮기도록 하겠습니다.