인프런 커뮤니티 질문&답변
연달아서 runtime error가 뜹니다 어떻게 해야 될까요?
작성
·
681
0

현재 redux-saga 게시글, 댓글 saga 작성하기 보고 있습니다.
1] 이런 에러가 뜨는데 어떻게 해결해야될까요?
Images[0]에서 인덱스를 빼버리면 그다음 nickname이 Cannot read property 'nickname' of undefined이라고 뜹니다
postCardContent에서도 cannot read property 'src' of undefined라고 뜨고
해시태그 작성하는 컴포넌트에서도 .split이 cannot read property라면서 오류떠서 앞에 postData도 String으로 감싸서 해결했습니다.
2] 터미널과 브라우저 콘솔에서는 컴파일이 완료될 때마다 아래의 메시지가 계속 뜹니다
1. getProps created store with state {
index: {},
user: {
logInLoading: false,
logInDone: false,
logInError: null,
logOutLoading: false,
logOutDone: false,
logOutError: null,
signUpLoading: false,
signUpDone: false,
signUpError: null,
changeNicknameLoading: false,
changeNicknameDone: false,
changeNicknameError: null,
followLoading: false,
followDone: false,
followError: null,
me: null,
signUpData: {},
loginData: {}
},
post: {
mainPosts: [ [Object] ],
imagePaths: [],
postAdded: false,
addPostLoading: false,
addPostDone: false,
addPostError: null,
addCommentLoading: false,
addCommentDone: false,
addCommentError: null
}
}
3. getProps after dispatches has store state {
index: {},
user: {
logInLoading: false,
logInDone: false,
logInError: null,
logOutLoading: false,
logOutDone: false,
logOutError: null,
signUpLoading: false,
signUpDone: false,
signUpError: null,
changeNicknameLoading: false,
changeNicknameDone: false,
changeNicknameError: null,
followLoading: false,
followDone: false,
followError: null,
me: null,
signUpData: {},
loginData: {}
},
post: {
mainPosts: [ [Object] ],
imagePaths: [],
postAdded: false,
addPostLoading: false,
addPostDone: false,
addPostError: null,
addCommentLoading: false,
addCommentDone: false,
addCommentError: null
}
}
4. WrappedApp created new store with withRedux(withReduxSaga(NodeBird)) {
initialState: {
index: {},
user: {
logInLoading: false,
logInDone: false,
logInError: null,
logOutLoading: false,
logOutDone: false,
logOutError: null,
signUpLoading: false,
signUpDone: false,
signUpError: null,
changeNicknameLoading: false,
changeNicknameDone: false,
changeNicknameError: null,
followLoading: false,
followDone: false,
followError: null,
me: null,
signUpData: {},
loginData: {}
},
post: {
mainPosts: [Array],
imagePaths: [],
postAdded: false,
addPostLoading: false,
addPostDone: false,
addPostError: null,
addCommentLoading: false,
addCommentDone: false,
addCommentError: null
}
},
initialStateFromGSPorGSSR: undefined
}
답변 21
1
네 직접 작성한거면 당연히 안 됩니다.
저 파일은 nginx 설치할 때 생기는 것이고, certbot으로 인증서를 발급하면 cerbot이 nginx에 저 글을 작성해줍니다.
https://www.zerocho.com/category/NodeJS/post/5ef450a5701d8a001f84baeb
0
0
선생님, 블로그보고 2가지 방법 다 해봤는데 아무리 해봐도 아래 사진처럼 http 부분에 certbot이 자동으로 작성을 안해주네요
흑흑
막상 사이트 들어가면 https로는 들어가져요
./certbot-auto할 땐 pm2도 끄고 80, 443포트 쓰고 있는 거 전부 kill해줬습니다.
제가 뭘 잘못하고 있는건가요?;;

0
certbot이 작성해준게 아니라 직접 작성한겁니다. 애초부터 없었어요
재시작도 해봤습니다.
프론트 노드서버 말씀하신거면 3060으로 했습니다.
재설치해봐도 여전히 server 설정은 작성 안해주네요...
0
저 코드는 직접 작성하신 게 아니라 certbot이 작성해준 코드죠? 직접 작성하신 거면 아무 의미 없습니다. 저건 cerbot을 설정하면서 저절로 작성되는 코드입니다.
그리고 sudo service nginx start로 nginx 재시작하셨나요?
노드 서버는 포트 3060으로 켜두셨죠?
0
nginx 설정에서 server부분이 없길래 아래 텍스트를 작성했습니다.
작성 전에는 접속하면 welcome to nginx! 이게 떴고 작성 후에는 접속하면 https가 없다고 하고 https로 접속하면 연결거부했다고 나와요
Congratulations! You have successfully enabled https://사이트이름 이것도 떴는데 어떻게 해야되나요?
https가 적용됐다고 문구도 나왔는데 흠;;
===============================================================================
server {
server_name 사이트이름;
location / {
proxy_set_header HOST $host;
proxy_pass http://127.0.0.1:3060;
proxy_redirect off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/사이트이름/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/사이트이름/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-ssl_dhparam.pem; # managed by Certbot
}
server {
if ($host = 사이트이름) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name 사이트이름;
listen 80;
return 404; # managed by Certbot
}
0
0
0
0
현재 프론트 서버 배포하기 보고 있습니다.
프론트에서 우분투로 접속 후에
sudo su로 관리자로 바꾸고
npx pm2 start npm -- start 후에 정상적으로 나온 것 같은데 프론트 서버 ip로 접속하면 연결할 수 없다고 나옵니다.
어떻게 해야되나요?

0
1. 요청을 보낼 때 body에 데이터가 들어가는데 이것을 익스프레스의 미들웨어인 express.json()이 req.body로 바꿔줍니다. 따라서 라우터보다 위에 app.use(express.json())이 들어가야 합니다.
2. 네 맞습니다.
3. swr의 데이터는 res.json(데이터)로 보낸 데이터와 일치합니다. 로딩중일 때는 데이터가 undefined입니다.
4. User.belongsToMany(User, { through: 'Follow', as: 'Followers', foreignKey: 'followingId' })할 때 시퀄라이즈가 as를 보고 get + as이름으로 메서드를 만들어줍니다. 따라서 User.getFollowers가 생깁니다. 마찬가지로 addFollowers, setFollowers, removeFollowers도 생깁니다. as: 'Followings' 하는 부분도 있으므로 그에 따른 get, set, remove, add도 생깁니다.
0
백에 대한 개념이 많이 없어서;; 백엔드는 따라가는 것도 급급해서... 질문드립니다.
findOne이 sequelize 메서드란 것도 아까 알았어요
에디터에서 abc ~~~ 이렇게만 나오다보니 property나 함수면 아이콘이 보이는데 그것도 아니라서 ㅠㅠ
1. req.params, req.query는 정확히 뭔지 알겠는데 req.body를 쓰려면 express.json()를 app.use에서 불러와야 쓸 수 있는건가요?
2. 프론트에서 요청보낼 때 data: { content: 'a', id: 1 } 이렇게 보내면 action.data = req.body가 되는건가요?
(3, 4번은 아래 코드에서 생겨난 궁금증입니다)
3. swr 사용해보기에서 user부분은 passport에서 deserialize부분의 done(null, user)가 되는건가요?
4. getFollowers는 어떻게 생겨나는 메서드인가요?
구체적으로 Post.associate 에서 주석으로 // Post.getUser, Post.addLikers 이렇게 적긴했는데 이것들이 원래 있는 메서드는 아닌걸로 생각은 되는데 어떻게 팔로워들을 가져올 수 있게 되는건지? 가 될 것 같아요
0
1. VS Code에서는 alt+shift 아래 누르면 한 줄 복사가 되고, ctrl + D하면 같은 단어들을 선택합니다.
2. Me.Followings가 배열이 아니라 숫자 2로 되어있네요.
0
1. saga나 reducer 작성하실 때 같은 것들끼리 선택하는 거는 어떻게 하는건가요?
예를 들어 밑에 signUp을 밑으로 한 번 더 복사하고
type에 SIGN_UP 이부분들만 선택하는거요
vscode에서는 alt + 방향키로 하면되는데 더 밑에거는 마우스 클릭해서 선택해야되고
ctrl+f로 찾아서 alt +엔터 누르면 모든 게 선택되어버려서 어떤 기능인지 궁금합니다!
2. redux에는 있는데 next에서는 왜 이렇게 뜨는건가요?;

0
0
1. sequelize sync + nodemon 항목을 보던 중, npx sequelize db:create 이후에 node app을 하니 에러가 떴습니다. 각 model파일마다 아래 코드를 넣어줬는데도 불구하고 에러가 뜨는 이유가 무엇인가요? 해결하려면 어떻게 해야되나요?
Executing (default): CREATE TABLE IF NOT EXISTS `Users` (`id` INTEGER NOT NULL auto_increment , `email` VARCHAR(30) NOT NULL UNIQUE, `nickname` VARCHAR(30) NOT NULL, `password` VARCHAR(100) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
Executing (default): SHOW INDEX FROM `Users` FROM `react-nodebird`
Executing (default): CREATE TABLE IF NOT EXISTS `Posts` (`id` INTEGER NOT NULL auto_increment , `content` TEXT NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `UserId` INTEGER, `RetweetId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`UserId`) REFERENCES `Users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`RetweetId`) REFERENCES `Posts` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8_general_ci;
DatabaseError [SequelizeDatabaseError]: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
at Query.formatError (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\sequelize\lib\dialects\mysql\query.js:239:16)
at Query.run (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\sequelize\lib\dialects\mysql\query.js:54:18)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\sequelize\lib\sequelize.js:619:16
at async MySQLQueryInterface.createTable (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\sequelize\lib\dialects\abstract\query-interface.js:225:12)
at async Function.sync (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\sequelize\lib\model.js:1300:5)
at async Sequelize.sync (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\sequelize\lib\sequelize.js:793:35) {
parent: Error: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
at Packet.asError (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\packets\packet.js:712:17)
at Query.execute (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\commands\command.js:28:26)
at Connection.handlePacket (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\connection.js:425:32)
at PacketParser.onPacket (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\connection.js:75:12)
at PacketParser.executeStart (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\packet_parser.js:75:16)
at Socket.<anonymous> (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\connection.js:82:25)
at Socket.emit (events.js:314:20)
at addChunk (_stream_readable.js:307:12)
at readableAddChunk (_stream_readable.js:282:9)
at Socket.Readable.push (_stream_readable.js:221:10) {
code: 'ER_COLLATION_CHARSET_MISMATCH',
errno: 1253,
sqlState: '42000',
sqlMessage: "COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'",
sql: 'CREATE TABLE IF NOT EXISTS `Posts` (`id` INTEGER NOT NULL auto_increment , `content` TEXT NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `UserId` INTEGER, `RetweetId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`UserId`) REFERENCES `Users` (`id`)
ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`RetweetId`) REFERENCES `Posts` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8_general_ci;',
parameters: undefined
},
original: Error: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
at Packet.asError (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\packets\packet.js:712:17)
at Query.execute (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\commands\command.js:28:26)
at Connection.handlePacket (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\connection.js:425:32)
at PacketParser.onPacket (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\connection.js:75:12)
at PacketParser.executeStart (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\packet_parser.js:75:16)
at Socket.<anonymous> (C:\Users\Lay\Desktop\code\lecture\next\back\node_modules\mysql2\lib\connection.js:82:25)
at addChunk (_stream_readable.js:307:12)
code: 'ER_COLLATION_CHARSET_MISMATCH',
sqlState: '42000',
sqlMessage: "COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'",
sql: 'CREATE TABLE IF NOT EXISTS `Posts` (`id` INTEGER NOT NULL auto_increment , `content` TEXT NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `UserId` INTEGER, `RetweetId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`UserId`) REFERENCES `Users` (`id`)
ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`RetweetId`) REFERENCES `Posts` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8_general_ci;',
parameters: undefined
},
sql: 'CREATE TABLE IF NOT EXISTS `Posts` (`id` INTEGER NOT NULL auto_increment , `content` TEXT NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `UserId` INTEGER, `RetweetId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`UserId`) REFERENCES `Users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`RetweetId`) REFERENCES `Posts` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE utf8_general_ci;',
parameters: undefined
}
0
0
자세히보니 리듀서가 잘못되어있었네요ㅠ 덕분에 잘 해결되었습니다
1. nodejs 강의 구매하려고 하는데요, 유튜브보니 노드교과서 개정판이 있던데 이것과 현재 인프런에 업로드 되어있는 강의와는 다른건가요?
2. 다른거라면 개정된 걸 구매하고 싶은데 업로드 예정일은 언제인가요?
0
0
0
1. 게시글 불러올 때 백엔드 posts router에서 include Image 해주셨나요?
2. store/configureStore.js에서 debug false로 하시면 됩니다.




