게시글

etc - 7달 전 등록 / 18일 전 수정

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

조회수:
0

FAQ

  • 스스로 해보기 풀이는 없나요? - 유튜브나 인프런 강좌에서 제공합니다(인프런에서도 무료로 보실 수 있습니다.)
  • https://open.kakao.com/me/zerocho 로 연락주시면 인프런 할인 쿠폰을 드립니다. 
  • 오타&오류 정오표는 어디에 있나요? - 이 링크를 클릭하세요. 
  • 이미지 말고 다른 파일을 업로드하려면 어떡하나요? - multer로 다른 파일 형식도 업로드 가능합니다(동영상, 문서 등등).
  • pug 스타일이 너무 싫어요 ㅠㅠ - ejs나 다른 걸로 바꾸시면 됩니다. pug는 제 책에서 중요한 부분이 아닙니다. 그저 지면을 아끼기 위해 선택했을 뿐이에요.
  • bcrypt가 윈도에서 안 깔려요. - bcrypt 문서에 윈도에서 bcrypt 설치하는 방법에 대해 나와 있습니다. 3버전부터는 그렇게 적용하셔야 합니다.

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

투표로 게시글에 관해 피드백을 해주시면 많은 도움이 됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright © 2016- 무단 전재 및 재배포 금지

댓글

26개의 댓글이 있습니다.
6일 전
현재 642페이지 실습 중인데요! 리사이징된 이미지를 불러오는 과정에서 문제가 있는지 제대로 출력이 되질 않네요..
버킷확인해보니깐 thumb 폴더가 없어서 만들어줘도 이미지가 뜨지 않고 엑박만 뜨네요!
터미널상에서는 오류가 없는데 어디가 잘못된걸까요?
6일 전
버킷이 비어있는 거면 버킷에 데이터를 올릴 때 잘못되었을 확률이 높습니다. 리사이징 전의 이미지도 등록이 안 되나요?
6일 전
Original 폴더말씀하시는건가요?? 거기는 제대로 저장됩니다! 게시물 올리기전에 이미지뜨는 것도 제대로 되구요!
6일 전
음 그러면 람다에서 트리거 쪽 설정이 문제인 것 같습니다. 그 부분 확인해보시겠어요?
4일 전
트리거 다시 설정하려고 하는데
맥에서는 zip파일 만들때 압축해제시 바로 index.js 파일이 뜨도록 할 수 있나요??
열심히 구글링을 해도 방법을 못찾겠네요ㅜㅜㅜ
8일 전
274p index.js의
db.User = require("./user")(sequelize, Sequelize);
db.Comment = require("./comment")(sequelize, Sequelize);
부분이 npm start시
require(...) is not a function
에러가 발생하는 부분이 있습니다.

에러메세지로 구글링 해봤을땐
https://stackoverflow.com/questions/33007878/nodejs-typeerror-require-is-not-a-function
이쪽의 지적과는 다르게
책에 적힌데로 sequelize 사용법이 저게 맞는거같은데 오류가 나네요

app.js의 var sequelize = require("./models").sequelize; 부분을 참고하여
db.User = require("./user").sequelize; 같은 형식으로 둘다 바꿔줘도

276p index.js 부분의
db.User.hasMany 쪽 hasMany 속성을 인식하지 못하는 부분에 관해 혹시 팁이 있을까요?
8일 전
혹시 모델 파일에서 return sequelize.define 이 것을 하지 않으신 거 아닌지요? return을 해주어야 hasMany같을 것을 붙일 수 있습니다.
9일 전
마지막 16장 공부 중인데요!
버킷정책을 입력하고 저장하려는데
엑세스가 거부되었습니다라고 뜨네요ㅜㅜ
기본설정 건드린것도 없는데말이죠!
9일 전
aws이신가요? gcp이신가요?
9일 전
아 AWS입니다!
9일 전
아래 댓글에 비슷한 분이 계시던데 한 번 따라해보시겠어요?

아래 aws 관련 질문드린 사람입니다. 문제는 해결했는데
과정이 바뀌었다기 보다, 퍼블릭 액세스 설정 > 퍼블릭 정책관리 > 새퍼플릭 정책 차단 과
퍼블릭 액세스 설정 > 퍼블릭 버킷 정책관리 > 버킷에 퍼블릭 정책이 있는 경우 퍼블릭 액세스 계정 및 계정간 액세스 차단 이 두부분을 false로 설정해 주어야 진행이 되네요!~
11일 전
아래 맥OS에서 mysql 설치오류 문의드렸던 학생입니다!
계속 문제가 생겨서 설치했던 mysql을 삭제 후 다음명령으로 책에서 나온대로 재설치를 했습니다.

sudo brew install mysql@5.7
sudo services start mysql@5.7(책에는 @5.7이 빠져있는 상태인데 오류가나서 @5.7을 붙였습니다)

여기까지 잘 설치가 되었는데

cho@InTaek-MacBookPro:~/Documents/VScode/nodebird$ mysql_secure_installation
-bash: /usr/local/bin/mysql_secure_installation: No such file or directory

여기서 파일을 찾을 수 없다네요..제대로 재설치가 안된걸까요?
11일 전
커맨드라인으로 계속 오류가 난다면 그냥https://dev.mysql.com/downloads/mysql/5.7.html#downloads 에서 dmg 파일로 설치하시는 게 좋을 것 같습니다. 설치 과정에서 설정이 많이 꼬인 것 같습니다.
10일 전
어떻게 해결은 했는데요! npm start로 서버 실행했다가 컨트롤Z로 끈 뒤 다시 재실행하면 다음과 같은 오류가 뜨네요ㅜㅠ
events.js:173
throw er; // Unhandled 'error' event
^

Error: listen EADDRINUSE: address already in use :::8001
at Server.setupListenHandle [as _listen2] (net.js:1254:14)
at listenInCluster (net.js:1302:12)
at Server.listen (net.js:1390:7)
at Function.listen (/Users/cho/Documents/VScode/nodebird/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/Users/cho/Documents/VScode/nodebird/app.js:62:5)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
at executeUserCode (internal/bootstrap/node.js:499:15)
at startMainThreadExecution (internal/bootstrap/node.js:436:3)
Emitted 'error' event at:
at emitErrorNT (net.js:1281:8)
at processTicksAndRejections (internal/process/next_tick.js:76:17)
at process.runNextTicks [as _tickCallback] (internal/process/next_tick.js:51:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:777:11)
at executeUserCode (internal/bootstrap/node.js:499:15)
at startMainThreadExecution (internal/bootstrap/node.js:436:3)
[nodemon] app crashed - waiting for file changes before starting...

구글링 해보니깐 killall -9 node를 하라고 해서 해보니깐 잘 되는데 다시 재실행하면 위와같은 오류가 또 뜨네요..
매번 저 명령을 칠 수도 없고...어떻게 해결해야할까요?
10일 전
아 해결이됬네요!! 컨트롤 c로 죽여야 말끔하게 죽는군요!
12일 전
expresss 를 사용한 프로젝트에서 절대경로를 설정하는 방법을 알고 싶습니다. 프론트엔드에서 리액트 프로젝트를 할때는 .env에 NODE_PATH=src 를 기재해놓으면 절대경로가 적용되었는데 express에서는 적용이 되지 않습니다. app-root-path 같은 모듈 없이 절대 경로를 설정하는 방법이 있으면 알고 싶습니다.
혹 방법이 없다면 모듈 추천 부탁드립니다 감사합니다~
11일 전
저는 절대 경로를 쓰지 않아서 이건 잘 모르겠습니다.
15일 전
현재 15장 학습을 위해서 nodebird 소스를 받아서 사용 중인데요
sequelize db:create 를 하면


Sequelize CLI [Node: 11.7.0, CLI: 5.4.0, ORM: 4.42.0]

Loaded configuration file "config/config.json".
Using environment "development".

ERROR: Client does not support authentication protocol requested by server; consider upgrading MySQL client

이런 오류가 뜨네요ㅜㅜㅜ대체 뭐땜에 그런걸까요??
현재 맥북으로 학습 중입니다!
15일 전
MySQL 5.7 버전을 설치하셨나요? 버전을 확인해주셔야 할 것 같습니다! 느낌이 8 버전을 설치하신 것 같아요~
13일 전
cho@InTaek-MacBookPro:~$ brew services list
Name Status User Plist
mongodb started root /Library/LaunchDaemons/homebrew.mxcl.mongodb.plist
mysql started root /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
mysql@5.7 stopped

cho@InTaek-MacBookPro:~$ brew services start mysql
Error: Permission denied @ rb_sysopen - /Users/cho/Library/LaunchAgents/homebrew.mxcl.mysql.plist

cho@InTaek-MacBookPro:~$ sudo brew services start mysql
Password:
Service `mysql` already started, use `brew services restart mysql` to restart.

cho@InTaek-MacBookPro:~$ sudo brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)

cho@InTaek-MacBookPro:~$ brew services list
Name Status User Plist
mongodb started root /Library/LaunchDaemons/homebrew.mxcl.mongodb.plist
mysql started root /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
mysql@5.7 started root /Library/LaunchDaemons/homebrew.mxcl.mysql@5.7.plist

cho@InTaek-MacBookPro:~$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

5.7로 설치하고 해봤는데 마지막과 같은 에러가 뜨네요ㅜㅜㅜ뭐가 잘못된가요?
13일 전
brew 앞에 다 sudo 붙여보세요
13일 전
Last login: Sun Feb 10 17:18:34 on ttys000
cho@InTaek-MacBookPro:~$ sudo brew services list
Password:
Name Status User Plist
mongodb started root /Library/LaunchDaemons/homebrew.mxcl.mongodb.plist
mysql started root /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
mysql@5.7 started root /Library/LaunchDaemons/homebrew.mxcl.mysql@5.7.plist

cho@InTaek-MacBookPro:~$ sudo brew services start mysql
Service `mysql` already started, use `brew services restart mysql` to restart.

cho@InTaek-MacBookPro:~$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
cho@InTaek-MacBookPro:~$

뭐 똑같네요....ㅠㅠㅠ
13일 전
에러 메시지에 답이 있는데요. sudo붙여서 리스타트해보세요
13일 전
cho@InTaek-MacBookPro:~$ sudo brew services list
Password:
Name Status User Plist
mongodb started root /Library/LaunchDaemons/homebrew.mxcl.mongodb.plist
mysql started root /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
mysql@5.7 started root /Library/LaunchDaemons/homebrew.mxcl.mysql@5.7.plist

cho@InTaek-MacBookPro:~$ sudo brew services restart mysql
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql` (label: homebrew.mxcl.mysql)
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)

cho@InTaek-MacBookPro:~$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

똑같습니다ㅠㅠ
한 달 전
525페이지에서 맨위쪽 코드보면
async
defer
src="~"
이런 코드가 있는데 각 라인당 어떤 역할인지 알고 싶네요ㅜㅜ프런트쪽이라 설명이 없는건가요??
한 달 전
구글맵에서 그냥 저렇게 하라고 한 겁니다. 설명드리자면 스크립트 코드를 비동기적으로 불러올 수 있게 됩니다.
한 달 전
삭제
한 달 전
아래 댓글이 연속으로 안달아져서 여기 이어답변 남깁니다.

아니요 수정한부분은 없습니다..
현재 작성한 소스코드가 올라와있는 주소는
https://github.com/rlawnsxo131/node.js-practice2/blob/master/10.nodebird(gcp)/routes/post.js

.zip 으로 업로드한 소스코드는
https://github.com/rlawnsxo131/node.js-practice2/tree/master/10.nodebird-gcp-upload
입니다 문제를 못찾겠네요..ㅜ
한 달 전
아래 질문 드린 사람입니다!
chrome 개발자 도구에 console에는 아래 에러가 나오고

(index):19 POST http://localhost:8001/post/img 500 (Internal Server Error)

(anonymous) @ (index):19
(index):15 <!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><meta name="viewport" content="width=device-width, user-scalable=no"><meta http-equiv="X-UA-Compatible" content="IE=edge"><link rel="stylesheet" href="/main.css"></head><body><div class="container"><div class="profile-wrap"><div class="profile"><form id="login-form" action="/auth/login" method="post"><div class="input-group"><label for="email">이메일</label><input id="email" type="email" name="email" required autofocus></div><div class="input-group"><label for="password">비밀번호</label><input id="password" type="password" name="password" required></div><a class="btn" id="join" href="/join">회원가입</a><button class="btn" id="login" type="submit">로그인</button><a class="btn" id="kakao" href="/auth/kakao">카카오톡</a></form></div><footer>Made by <a href="https://instagram.com/jun_xxoo" target="_blank">Juntaakim</a></footer></div><h1>Not Found</h1><h2></h2><pre></pre></div></body></html>

GCP Cloud Function 로그에는

yhstsam7g5c1
Function execution took 16 ms, finished with status code: 500 과

{
insertId: "000000-e113c6ea-0f8b-466f-9785-0abe11576509"
labels: {…}
logName: "projects/node-depoly-228016/logs/cloudfunctions.googleapis.com%2Fcloud-functions"
receiveTimestamp: "2019-01-09T03:09:15.698332358Z"
resource: {…}
severity: "ERROR"
textPayload: "Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11)
at ServerResponse.header (/var/tmp/worker/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/var/tmp/worker/node_modules/express/lib/response.js:170:12)
at exports.resizeAndUpload (/user_code/index.js:8:25)
at /var/tmp/worker/worker.js:725:7
at /var/tmp/worker/worker.js:708:11
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)"
timestamp: "2019-01-09T03:09:09.414Z"
trace: "projects/node-depoly-228016/traces/5876e19027eb5e5d577ecf6e072dd079"
}
에러가 나네요... 번거롭게 해드려 죄송합니다. 그리고 답변 감사합니다!
한 달 전
저 에러는 res의 메서드(res.json, res.send 등등)을 두 번 이상 사용했을 때 발생합니다. 혹시 서버쪽 코드를 수정하셨나요?
한 달 전
cloud functions부분 649~진행중입니다.
마지막까지 진행했으나 에러가 발생하네요. 제로초님의 깃험 소스들을 모두 복사하고 저장소나 버킷등은 변경해 실험해봤으나 역시 에러가 발생합니다.
에러가 나는 부분은 veiws/main.pug 의
if (document.getElementById('img')) {
document.getElementById('img').addEventListener('change', function (e) {
var formData = new FormData();
console.log(this, this.files);
formData.append('img', this.files[0]);
var xhr = new XMLHttpRequest();
xhr.onload = function () {
if (xhr.status === 200) {
var url = JSON.parse(xhr.responseText).url;
var originalUrl = JSON.parse(xhr.responseText).originalUrl;
document.getElementById('img-url').value = url;
document.getElementById('img-preview').src = originalUrl;
document.getElementById('img-preview').style.display = 'inline';
} else {
console.error(xhr.responseText);---------이부분과
}
};
xhr.open('POST', '/post/img');
xhr.send(formData);-------------------------- 이 부분
});
에러 내용을 보아선 cors문제인것 같기도 한데 routes/post.js
router.post('/img', isLoggedIn, upload.single('img'), (req, res, next) => {
console.log('req.file:', req.file);
axios.get(`https://us-central1-node-depoly-227613.cloudfunctions.net/gcp-upload?filename=${req.file.filename}`)
.then((response) => {
const filePath = req.file.path.split('/').splice(0, 3).join('/');
const originalUrl = `${filePath}/${req.file.filename}`;
const url = `${filePath}/${response.data}`;
res.json({ url, originalUrl });
})
.catch((error) => { -----------이부분
console.error(error);
next(error);
});
});
인데 혹시 AWS처럼 GCP에도 권한에대한 변경사항을 처리해야 하는 부분이 생겼는지 질문 남깁니다.
그부분이 아니라면 제 코드가 문제일테니 다시 문제 찾아보겠습니다...
한 달 전
에러메시지를 올려주시지 않으면 저는 해결해드릴 수가 없습니다. 에러 메시지가 제일 중요합니다.
2달 전
아래 aws 관련 질문드린 사람입니다. 문제는 해결했는데
과정이 바뀌었다기 보다, 퍼블릭 액세스 설정 > 퍼블릭 정책관리 > 새퍼플릭 정책 차단 과
퍼블릭 액세스 설정 > 퍼블릭 버킷 정책관리 > 버킷에 퍼블릭 정책이 있는 경우 퍼블릭 액세스 계정 및 계정간 액세스 차단 이 두부분을 false로 설정해 주어야 진행이 되네요!~
2달 전
안녕하세요! 현재 496쪽 공부중인데요! 스크립트 부분에

if (xhr.status === 200) {
e.target.bid.value = '';
e.target.msg.value = '';
errorMessage.textContent = '';
}

이런식으로 되어 있으면 form태그에서 받아온 값을 ''으로 초기화해주는 거여서 나중에
xhr.send(JSON.stringify({
bid: e.target.bid.value,
msg: e.target.msg.value,
})

에서도 입력받은 값이 아닌 ''으로 값을 전송해주는 형태인거 아닌가요??
잘 돌아가긴 하는데 제가 어느 부분에서 이해를 잘못 한건가요??
한 달 전
bid.value 이 부분은 input 태그의 값입니다. input 태그의 value는 인풋에 키보드 입력시 변합니다.
한 달 전
입찰버튼을 누르면 xhr.onload() 함수가 실행되고
input태그에 있던 값이 bid.value로 넘어가는 건 알겠는데
지금 코드를 보면
bid.value='';
으로 되어있으니 넘어오는 값을 무시하고 ''로 초기화되는거 아닌가요?
한 달 전
xhr.onload는 입찰이 서버에서 잘 처리된 후에 실행됩니다. 다음 입찰을 받기 위해 input을 비우는 것입니다. 즉, bid.value = '';는 모든게 끝난 후 실행되는 것입니다.
2달 전
안녕하세요 책 정말 잘 읽고 있습니다.
현재 AWS의 S3와 연동해 이미지를 업로드하는 632페이지까지의 과정을 진행중입니다.
이미지가 S3페이지에 업로드가 잘 된것은 확인했으나 nodebird 어플리케이션의 페이지상에 해당 이미지가 표현이 되질 않습니다.
또한 버킷의 권한 설정시 책에는 언급되지 않은 퍼블릭 액세스 설정을 바꾸어야 가능하던데
혹시 이부분도 책을 쓰신 시점과는 다른 사항이 있나해서 질문을 드립니다.

현재 console 오류 내용을 클릭해보면
GET https://junsnodebird.s3.ap-northeast-2.amazonaws.com/original/15468277982790.PNG 403 (Forbidden)

network탭의 내용에서는 아래와 같은 내용이 출력됩니다.
Request URL: https://junsnodebird.s3.ap-northeast-2.amazonaws.com/original/15468277982790.PNG
Request Method: GET
Status Code: 403 Forbidden
Remote Address: 52.219.56.119:443
Referrer Policy: no-referrer-when-downgrade
Provisional headers are shown
Referer: http://localhost:8001/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

혹시 변환사항이 있다면 답변주시면 감사하겠습니다.
2달 전
626~627 과정이 바뀌었나요?
3달 전
혹시 348페이지에서 '프로젝트를 콘솔에서 실행 가능한 명령어로 만들 필요가 없으므로 bin/www는 필요하지 않습니다.' 라는 문구 내용이 이해가 되지 않아 질문 남깁니다. 어떨때 www 파일을 생성해서 실행해줘야 하고 그냥 app.js 로 만들어서 실행해야 하나요
3달 전
npm start라는 명령어 대신 서비스명을 명령어로 서버를 시작하고 싶을 때 www파일을 씁니다. 근데 그런 경우는 거의 없습니다.
4달 전
안녕하세요... 정말 책 너무 잘 읽고 있습니다. node js 책 중에 최고의 책이라고 생각해서 여기저기 추천을 남기고 다니네요 ㅎㅎ 다름이 아니고, 제가 스스로 해보기 강의보면서도 하다가 궁금한게 있어서요 ㅠㅠ 웹소켓의 DB에 시스템 메시지도 저장하는 부분에서 웹 소켓 내에서 쿠키 값에 접근하기위해 socket.request.signedCookies에 접근하는 함수가 있는데 제 socket.request 객체 내에는 signedCookies 키도 없고, 심지어 cookies 키도 없네요... cookie에 접근할만한 방법이 socket.request.headers.cookie로 접근하는 방법밖에 없던데 왜그런건가요? 바쁘실텐데 한가하실때 부탁드립니다.. ㅠㅠ
4달 전
요청을 보내는 axios부분에서 쿠키를 넣어주셨나요?
4달 전
headers: {
Cookie: `connect.sid=${'s%3A' + cookie.sign(req.signedCookies['connect.sid'], process.env.COOKIE_SECRET)}`
}
내 저도 이 방식으로 코드를 작성했는데, signedCookies 항목에서 에러가 뜹니다.. 라우터 부분나 app.js에서 express-session 뒤에 미들웨어를 만들어서 req.signedCookies를 찾아보면 존재하는데 이상하게 웹 소켓에서 접근하면 프로퍼티가 없네요... 처음부터 코드를 다시 작성해볼까요?
4달 전
이게 웹소켓은 미들웨어를 거치지 않기 때문에 req.cookies, req.body 이런 것들이 부재합니다. 그래서 제가 io.use에서 익스프레스 미들웨어를 다시 연결해주는 것이고요. 아마 그런 이유로 signedCookies도 없을거에요.
4달 전
어... 근데 제 코드에도 sessionMiddleware를 웹소켓으로 넘겨받아서 io.use로 미들웨어를 연결해주긴 하는데... 역시 없네요 ㅠㅠ.. 혹시나해서 깃허브에서 소스코드를 받아서 해봤는데.. 역시 같은 에러가 뜹니다...


C:\Users\KIM\Desktop\example\gif-chat2\socket.js:41
Cookie: `connect.sid=${'s%3A' + cookie.sign(req.signedCookies['connect.sid'], process.env.COOKIE_SECRET)}`
^

TypeError: Cannot read property 'connect.sid' of undefined
콘솔상에 이런 에러가 뜹니다.. connect.sid 프로퍼티가 없다고 뜨긴 하는데. console.log(Object.keys(req))를 했더니 아얘 키가 없네요... 혹시 express-session 미들웨어를 거치게 되면 headers의 cookie에 대해 signedCookies 속성이 생기는 거 맞나요?? io.use 내에서 미들웨어 거친 뒤에 바로 console.log로 출력해봐도 키가 없어서요... ㅠㅠ 바쁜데 번거롭게 해드려서 죄송합니다..
4달 전
io.use((socket, next) => {
sessionMiddleware(socket.request, socket.request.res, next);
console.log(Object.keys(socket.request));
});
이런식으로 출력을 해보았을 때,
[ '_readableState','readable', 'domain', '_events', '_eventsCount', '_maxListeners', 'socket', 'connection', 'httpVersionMajor', 'httpVersionMinor', 'httpVersion', 'complete', 'headers', 'rawHeaders', 'trailers', 'rawTrailers', 'upgrade', 'url', 'method', 'statusCode', 'statusMessage', 'client', '_consuming', '_dumped', '_query', 'res', 'cleanup', '_parsedUrl', 'sessionStore', 'sessionID', 'session' ]
이렇게 키들이 나오는데 cookies 나 signedCookies가 안보입니다.. ㅠㅠ

이 출력을 chat.on('connection', (socket) => { 내부에서 해도 마찬가지네요..
그런데 app.js의 sessionMiddleware 호출 후 출력해봤을 때는 있습니다...
4달 전
혹시 io.use((socket, next) => cookieParser 부분도 쓰셨나요? 동영상 1분 26초에 있습니다.
4달 전
오!! 그 항목을 빠뜨렸네요.. ㅠㅠ 잘 찾아봤어야하는건데...
해결되었습니다.. ㅠㅠ 너무 귀찮게 해드렷네요... 친절한 답변 정말 감사합니다.
4달 전
어제 주신 답변 정말 감사합니다. 다름이아니라 하나더 질문이 있어서 댓글을 남깁니다.
425페이지에 Access-Control-Allow-Origin이 * 로 되어있어 해당클라이언트의 요청만을 허용하기 위한 코드를 작성하는 부분이 있습니다. 그런데 그부분만 작성을 하면

(node:10020) UnhandledPromiseRejectionWarning: TypeError: Parameter "url" must be a string, not undefined
at Url.parse (url.js:103:11).....

해당 에러가 발생합니다. 코드를 잘못 작성한 것인지 아무리 보아도 잘 보이지 않더군요. ZeroCho
님의 github을 들어가서 다시 확인해도 다른점을 못 찾겠습니다. 원래는 문제없이 작동이 되어야 하는 부분인 것인지만 말씀해주시면 감사하겠습니다. 문제가 없어야 한다면 제 실수일테니 더 찾아보겠습니다.
4달 전
위에 적지 못한 부분이 있는데 localhost:8003은 잘 작동하나 localhost:8003/mypost등 다른 URL이 작동을 하지 않고 위기술한 에러가 발생합니다
4달 전
414쪽 const request = async (req, api) => { 여기 윗줄에

axios.defaults.headers.origin = 'http://localhost:8003';
를 추가해보시겠어요? axios에서 요청을 보낼 때 헤더를 기본적으로 넣어주는 부분입니다.
클라이언트에서 서버로 요청을 보낼 때는 자동으로 req.headers.origin이 생기는데 서버에서 서버로 요청을 보낼 때는 req.headers.origin이 생성되지 않아 425에서 req.get('origin') 부분이 에러가 나는 거였습니다. 죄송합니다 ㅠㅠ
4달 전
감사의 의미로 위의 오픈카톡으로 메시지 주시면 인프런 강좌 무료 쿠폰 하나 드리도록 하겠습니다!
4달 전
책 잘읽고 있습니다.다름이 아니라 JWT 토큰 인증하는 구간인 412페이지 마지막 문장에서 토큰 유효기간이 만료되었을 때 갱신하는 코드를 추가해야한다고 하셨고 다음절에서 작성한다고 되어있습니다.
그 다음장을 보았는데 해당 내용이 어느부분인지 모르겠습니다.
제가 못찾는 것이라면 혹시 어느부분을 살펴야 하는지 알 수 있을 지요..
4달 전
원래 414쪽 코드에 있었는데 복잡해서 뺐습니다. 실수로 412쪽 설명을 수정하지를 못했네요.
414쪽 코드에서 catch 부분에
if (error.response.status === 419) {
delete req.session.jwt;
return await request(req, api);
}
추가하시면 됩니다. 이 코드를 뺀 이유는 이렇게 재귀적으로 처리하면 무한히 에러가 발생하여 서버가 죽을 수도 있기 때문입니다.
5달 전
책 잘보고 있습니다. 다름이아니라 7장과 8장에서 시퀄라이즈와 몽고디비의 routes/index.js에 대해서 질문드립니다. 시퀄라이즈에서는 GET /를 하면서 User.findAll()로 모든 사용자를 찾아 렌더링하는데 왜 몽고디비에서는 User.find()를 하는건가요? 설명은 똑같이 모든 사용자를 찾는다고 나와있어서 헷갈리네요.
5달 전
네 그게 시퀄라이즈와 몽구스의 차이입니다. 헷갈리지만 외우셔야 합니다.
5달 전
ebook 나왔네요. 잘 보겠습니다.
6달 전
2장에서 노드 설치할 때, 2018년 5월 기준 v.10을 말씀하셔서, 책도 v.10에 맞춰져있는줄 알았는데, 집필하신건 이전 내용인가요? 막상 3.5.5.2 양방향 암호화의 crypto.createCipher()는 v.10에서 deprecated되어서요 ㅜㅜ
6달 전
모든 내용은 v10에서 집필되었습니다. createCipher가 deprecated된 것도 알고 있지만 입문서에서 iv를 설명하기엔 너무 지나쳐서 그냥 넣었습니다.
6달 전
그리고 웃긴건... createCipheriv에서도 iv가 강제가 아니라 null 값을 넣을 수 있습니다. null을 넣는다면 createCipher과 동일한 동작을 해서 createCipher가 deprecated된 게 잘 이해가 되지 않습니다.
6달 전
ebook으로 혹시 구매할 수 있나요?
6달 전
9월에 나옵니다~
6달 전
전자책 출시되었습니다~
7달 전
안녕하세요. 출간하신 책 잘 보고 있습니다. 보면서 여쭤보고 싶은게 있습니다.
백그라운드에 관한 설명인데요. 만약 제가 AWS API를 이용해서 파일을
업로드 하는 함수를 작성하면(예를들어 uploadFileAWS) 타이머함수의 콜백으로
uploadFileAWS를 인수로 지정하고 해야 백그라운드로 작업을 넘길 수 있나요
아니면 타이머함수를 사용하지 않고 uploadFileAWS만 써도 백그라운드로
작업을 넘기나요?
7달 전
uploadFileAWS가 비동기함수라면 setTimeout없이도 백그라운드로 넘어갑니다!
7달 전
jwt 인가요 json web token 으로 로그인 crud 구현하시는 내용도 책에 있나요
7달 전
JWT와 JWT 로그인은 있습니다~
7달 전
대표님 핸드폰 번호좀요 꼭좀 질문드릴게 있어서요 ribia@naver.com
7달 전
카카오톡 메일로 보내드렸습니다~
7달 전
node.js 에서 타입스크립트 쓰는거 보여주시는 강좌 해주시면 안되나요
7달 전
저는 typescript를 매우 안 좋아합니다 ㅠㅠ
7달 전
타입스크립트가 트렌디 하고 매력적이라고 극찬들을 하던데 실례가 안된다면 제로님께 싫어하시는 이유를 여쭈어 봐도 괜찮을까요?
7달 전
저도 정적 타입 체크 기능이 자바스크립트에 있으면 좋겠다고 생각은 하는데요. 타입스크립트처럼 타입을 강제해야할 필요가 있는지는 모르겠습니다. 타입스크립트 쓴다고 에러가 아예 안 나는 것도 아니고요. 저는 타입 체킹 자체가 귀찮습니다. 자바스크립트가 워낙 손에 익어서 타입 에러도 거의 나지 않고요.
7달 전
추가로 타입스크립트 마스터하는 데 하루도 걸리지 않기 때문에, 정말 필요하게 되면 그 때 사용해볼 예정입니다.
7달 전
저도 비슷한 생각과 관념을 가지고 있어서 여쭈어 보았는데, 답변 감사합니다. 제로님. 동영상 강의도 잘 보고 많이 배우고 있습니다. 제로님 ^^;;