수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결React로 NodeBird SNS 만들기
팔로우 오류 질문입니다.
팔로우 버튼을 누르면 아래와 같은 오류가 뜹니다. 언팔로우 버튼이 있을 때에는 눌러을 때 팔로우로 정상 작동합니다만...
- 미해결React로 NodeBird SNS 만들기
server.js에서 설정한 커스텀 서버의 동작 관련 오류
server.js의 커스텀 서버에 아래와 같이 특정 페이지로 진입하는 코드를 추가했습니다. 이렇게 설정한 후 /village/community/1 와 같이 접근하면 로컬에서는 정상적으로 노출이되는데(productio 모드로 구동시에도)실제 서버에서 구동시에는 아래와 같은 오류가 로그에 찍히며 접근이 안되더라구요. 혹시 이와 관련하여 예상되는 원인이 있으신지.. 조언을 구할 수 있을까요?
- 미해결React로 NodeBird SNS 만들기
Module not found: Can't resolve 'fs' 에러가 갑자기 생겼습니다..
7.5 까지 잘 따라하고, 페이지도 정상 작동했었는데.. 그런데, 갑자기 회원가입 몇개 하고 나서, 한 10분쯤 뒤에 갑자기 이런 에러가 뜨네요.. ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ Module not found: Can't resolve 'fs' in 'C:\Users\MiRcomputer\Documents\GitHub\react-nodebird\front\node_modules\destroy' ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 옛날 인프런 제로초님의 Q&A 를 보니, next.config.js를 손봐야 된다고 답변이 적혀있는것을 봤습니다. 하지만 next.config.js가 나오는 부분은 8장 부터였고, 7장에는 없어서 질문을 드립니다. 아무것도 안 건드리고, 유저 회원가입만 3개정도 했는데 갑자기 이런오류가 뜨니 황당하고 뭘 어떻게 해야할지 모르겠네요. ㅠ . ■react-nodebird\back>npm run dev 포트 번호 사용중이라고 떠서 일단 바꿨습니다 (3066->3067) 포트번호 바꾸니 백 서버는 정상작동합니다. . ■react-nodebird\front>npm run dev front역시 포트번호 사용중이라 떠서 먼저, 바꿨습니다. (3061 -> 3062) 포트를 바꾸고 다시 npm run dev를 해보니.. Module not found: Can't resolve 'fs' in 'C:\Users\MiRcomputer\Documents\GitHub\react-nodebird\front\node_modules\destroy' . 뭐가 갑자기 문제인걸까요? 또한, 강의 흐름상 fs역시 요 근래에 작업한 적이 없는데, 갑자기 이런에러가 뜨니 좀 이상합니다.. 서버를 아예 껐다 켜도 똑같은 증상이 나타납니다. . 7.5까지 타이핑한 깃허브 주소를 혹시몰라 추가 하겠습니다. https://github.com/pym7857/react-nodebird . 아니면 node modules 폴더를 아예 삭제해버릴까요 ? ..
- React로 NodeBird SNS 만들기
createdAt 오류..
삭제된 글입니다
- 미해결React로 NodeBird SNS 만들기
질문이요
밑에 줄에서 [env]는 어떤 동작을 의미하나요?? const config = require('../config/config')[env];
- 해결됨React로 NodeBird SNS 만들기
sequelize 에러 내용파악이 잘안됩니다..
에러가 다음과 같이 났습니다. code: 'ER_TRUNCATED_WRONG_VALUE', errno: 1292, sqlState: '22007', sqlMessage: "Truncated incorrect DOUBLE value: '[object Promise]'", sql: "UPDATE `Images` SET `PostId`=?,`updatedAt`=? WHERE `id` IN ('[object Promise]')", parameters: [ 11, '2020-05-26 23:21:38' ] }, sql: "UPDATE `Images` SET `PostId`=?,`updatedAt`=? WHERE `id` IN ('[object Promise]')", parameters: [ 11, '2020-05-26 23:21:38' ] } SequelizeDatabaseError: Truncated incorrect DOUBLE value: '[object Promise]' at Query.formatError (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/sequelize/lib/dialects/mysql/query.js:244:16) at Execute.handler [as onResult] (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/sequelize/lib/dialects/mysql/query.js:51:23) at Execute.execute (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/mysql2/lib/commands/command.js:30:14) at Connection.handlePacket (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/mysql2/lib/connection.js:417:32) at PacketParser.onPacket (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/mysql2/lib/connection.js:75:12) at PacketParser.executeStart (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/mysql2/lib/packet_parser.js:75:16) at Socket.<anonymous> (/Users/eunwoo/nodeBird-react-node/ch1/back/node_modules/mysql2/lib/connection.js:82:25) at Socket.emit (events.js:311:20) at addChunk (_stream_readable.js:294:12) at readableAddChunk (_stream_readable.js:275:11) at Socket.Readable.push (_stream_readable.js:209:10) at TCP.onStreamRead (internal/stream_base_commons.js:186:23) POST /api/post 500 38.030 ms - 1495 에러내용파악자체가 잘안되네요.. db는 확인해보니, image와 post는 제대로 들어갔습니다. Network탭에서 post response에 500에러가 뜨고 SequelizeDatabaseError: Truncated incorrect DOUBLE value: '[object Promise]' 이렇습니다. 요약하면, 에러내용은 위와 같은데 에러 내용파악이 잘안되고 db는 제대로 들어가 있는 상태이고, Redux는 FAILURE이 됩니다. 현재까지 코드 푸시한 깃주소입니다. 한번 확인 부탁드려도 될까요 https://github.com/stefan-CHO/react-sns-tweeter
- 미해결React로 NodeBird SNS 만들기
강의와는 딱히 상관 없지만 궁금한 질문 드립니다
redux와 saga를 강의에서 사용하셨는데 graphql과 apollo는 어떤가요?? 어느 것을 제로초님은 더 선호하시나요???
- 미해결React로 NodeBird SNS 만들기
로그인 세션에 관한 질문을 드립니다.
로그인을 한 후, 좌측상단의 로고를 클릭하면 (메인으로 이동) 로그인이 유지되어 있습니다. 그런데 F5로 새로고침을 하면 로그인이 풀려버립니다. 혹시 어느부분을 살펴봐야 할 지 알 수 있을까요? connect.sid 에는 값이 들어있습니다.
- 미해결React로 NodeBird SNS 만들기
7-8강 까지 보고 오류가 생겨서 문의드립니다.
해당 이슈가 api/post?lastId=0&limit=10이 404가 뜨고, LOAD_MAIN_POSTS_FAILURE가 떠서 문의드립니다. pages/index.js sagas/post.js routes/posts.js 어느 부분에서 에러가 나서 그런지 못찾아서 문의드려요. 답변 부탁드립니다.
- 미해결React로 NodeBird SNS 만들기
Input.Textarea 가 작동이 안되요..
코드에서 Input.Textarea 부분을 넣으면 아래 에러가 뜨는데 혹시 어떤 문제가 있나요..? 주석처리를 하면 다시 정상적으로 작동합니다. 그리고 redux 코드 쓴 이후로 계속 이 에러가 발생 하네요..
- 미해결React로 NodeBird SNS 만들기
sequelize 관계설정이 안되는거 같아요...
테이블은 정상적으로 만들어지는데 제가 postgres쓰는데 적어주신 코드대로 했는데 관계들이 생성이 안되네용...
- 미해결React로 NodeBird SNS 만들기
해당 영상 프로젝트 깃허브
제로초님 깃허브 주소는 아는데 이 동영상에서 하고 있는 완벽한 소스코드 깃허브에서 보려고 하는데 깃허브에 올려 놓으셨나요? 올려놓으셨으면 어떤건지 좀 알려주실 수 있으신가요? db쪽이 너무 이상해서요
- 해결됨React로 NodeBird SNS 만들기
Invalid prop 'checked' supplied to 'Checkbox'
회원가입 form을 만드는데 (ch1) Invalid prop 'checked' supplied to 'Checkbox' 라고 콘솔창에 계속 떠서 구글링해보니 최신버전으로 바꾸라고 하더라구요 그래서 npm i antd@4로 버전을 바꿨는데 콘솔창의 에러는 사라졌지만 onSubmit이 안되는 것같은 반응을 보였어요! 이전의 질문을 찾아보니 antd@3으로 바꾸라고 해서 해보니까 다 작동하는데 또 저 에러(제목)가 뜨더라고요ㅠㅜㅠ 버전에 따라서 다른 반응을 보이는데 어떻게 해야할까요??
- 미해결React로 NodeBird SNS 만들기
왜 댓글이 갑자기 안불러 와질까요...
로그인이 되어있지 않다는 이유로 comments가 안 불러와지는 현상입니다... . 보시다시피..로그인을 한 상태인데도 불구하고... 저 댓글 불러오기 뺴고 다됩니다... ex) 팔로우, 프로필에서 팔로우 끊기, 이미지 업로드, 게시글 업로드... 다 되는데 왜 댓글 불러와지기만 안될까요 ... 심지어 로그인을 했는데, 로그인이 필요하다하니 도무지 해결하지를 못하겠습니다 ㅠ . 리덕스DevTools에서는 LOAD_COMMENTS_REQUEST까지 갔다가 LOAD_COMMENTS_FAILURE가 뜹니다. . 그렇다면 사가에서 axios로 get요청 보내는것까지는 문제가 없다는 거고.. function loadCommentsAPI(postId) { return axios.get(`/post/${postId}/comments`); . 그렇다면 /* 해당 게시글의 댓글들 가져오기 */ router.get('/:id/comments', isLoggedIn, async (req, res, next) => { try { /* 항상, 게시글이 먼저 있는지 확인 */ const post = await db.Post.findOne({ where: { id: req.params.id } }); if (!post) { return res.status(404).send('포스트가 존재하지 않습니다.'); } 여기서 오류가 발생한다는거겠죠 ? 여기서 isLoggedIn에 걸리는 것이겠지요.. . 혹시나 제가 middleware.js를 잘못작성했나 다시 들어가봤습니다. exports.isLoggedIn = (req, res, next) => { if (req.isAuthenticated()) { // req.isAuthenticated(): express와 passport에서 로그인했는지 판단하는 공식함수 next(); // next()를 하면 다음 미들웨어로 ! } else { res.status(401).send('로그인이 필요합니다.'); // next()없으므로 다음 미들웨어로 안넘어가고 여기서 끝나버림 } } 역시나 잘못작성하지 않았습니다.. 어제까지만 해도 됐었거든요. 당연히 여길 잘못작성했을리가 없었고.. . 오늘 갑자기 6-19 강의까지 듣고나니 이렇게 되버렸네요. ㅠ . 왜 이러는걸까요 ?? . 혹시 몰라서 6-19까지 타이핑 완료한 깃허브 주소를 같이 업로드 하겠습니다.. https://github.com/pym7857/react-nodebird 이런 현상이 왜 발생하는건가요 ..?
- 미해결React로 NodeBird SNS 만들기
세션이 만료되었을 때 로그인 페이지로 이동하려면
안녕하세요! 강의 듣고 토이프로젝트를 진행중입니다. 만들고 있는 서비스는 로그인을 해야 이용할 수 있는 기능이 주인데, 배포를 하고 진행하다보니 중간에 세션이 만료되면 req.user를 불러오지 못하여 에러를 표시하는 문제가 있어서 백엔드에서 만약 로그인 상태가 아니라면 바로 로그인 페이지로 보내주려고 합니다. (사가에서 페이지를 이동시키기에는 로그인이 필수인 경우가 너무 많아서 아예 isLoggedIn 미들웨어에서 로그인 정보를 발견하지 못할 시 이동을 시키고자 합니다!) isLoggedIn 미들웨어에서 로그인 상태가 아닐 시 res.redirect('http://localhost:3060/login); 으로 로그인 페이지로 이동하는 코드를 작성하고 로그인 정보를 없앴더니 이런 식으로 302에러만 줄창 뜨고 리다이렉션이 일어나지 않다가 접속이 끊겼습니다. 메인에 접속했을 때에 사용자 정보가 없으면 로그인 페이지로 이동시키는 코드가 프론트에 적용되어 있어서 isLoggedIn 미들웨어에서 로그인 상태가 아닐 시 페이지를 새로고침하는 식으로 진행하고자 node js에서 새로고침을 시키는 방법을 찾아보는데 원하는 방법을 찾기가 힘드네요 ㅠㅠ 이런 경우에는 어떻게 처리해야 할지 조언해주시면 감사하겠습니다 ㅠㅠ + 익스프레스에서 세션의 기한을 늘려줄수도 있던데 혹시 그걸 이용해서 로그아웃이 안되도록 1년 이런식으로 장시간 로그인이 유지되게 늘려주면 서버에 무리가 갈까요...?
- 미해결React로 NodeBird SNS 만들기
onChange 하나의 함수로 state를 받을 수 있는 방법은 없나요?
예를 들어 아래와 같이요. handleChange = (e) => { this.setState({ [e.target.name]: e.target.value, }); }; e.target.name(e.target.value) 와 같이 useState의 set 함수 부분을 html 태그 name부분과 같게해서 해볼려고 하는데 혹시나 방법이 있는지 여쭤봅니다! 항상 좋은 강의 감사합니다.
- 미해결React로 NodeBird SNS 만들기
addLiker() 에 대한 질문입니다.
sequelize 에서 addLiker()와 addLikers() 이렇게 단,복수 형태로 둘 다 만들 수 있다고 알고있는데, 예를들어,, post.addLiker()라고하면, 왜 post.Liker가 아닌, post.Likers로도 사용이 가능한건가요? 강의에서는 await post.addLiker(req.user.id); 이렇게 post.addLiker()를 쓰고, const isLiked = me && post.Likers && post.Likers.find(v => v.id === me.id); post.Likers로 쓴것을 보고 의문점이 들어서 질문드립니다.
- 미해결React로 NodeBird SNS 만들기
post.Images에 대해 질문드립니다.
항상 질문에 대한 답변을 빠르게 해주셔서 감사합니다 제로초님~ 강의를 듣다 궁금한게 생겨 질문 3개 정도를 드리려 합니다. ■[질문 1] 강의 처음~1분대 쯤에 (PostCard.js) cover={post.Images[0] && <img alt="example" src={ `http://localhost:3065/${post.Images[0].src}` } />} 이 부분에서 post.Images라는 속성을 사용했는데, 이처럼 post.Images라는것이 가능한 이유가 routes/post.js에서 await newPost.addImages(images); 위와 같이 (sequelize에서 post테이블과 image테이블의 관계를 보고 제공하는) addImages()라는 메서드가 post객체에 images라는 속성을 만들었기 때문이라고 보면 되나요 ? 즉, addImages()라는 메서드가 사용될때, post.Images가 가능해지는것인지가 궁금합니다. ■[질문2] (routes/post.js) /* 방법2: db에서 불러와서 프론트로 전달 */ const fullPost = await db.Post.findOne({ where: { id: newPost.id }, /* include: 게시글 불러올때 user정보와 image정보도 같이 불러온다. */ include: [{ model: db.User, // 게시글과 연관된 사용자만 가져온다. (=게시글과 연관된 사용자는 글쓴이 딱 한명이다.) // include를 이렇게 '명시'해주면, Post에 User라는 속성을 달아줌. // -> (PostCard.js) post.User.nickname[0].. 이런식으로 사용가능 !! }, { model: db.Image, // 프론트에서 Post.Image 로 사용가능 }], }); 위와 같이 include속성을 사용할때 역시, post객체에 Image라는 속성이 만들어지는건가요 ? 즉, 이렇게 include 로 선언했을때도 post.image가 가능해지는것인지 궁금합니다. ■[질문 3] addHashtag()나 addImage()같은 메서드는 sequelize에서 관계를 보고나서 알아서 만들어주는 메서드라고 하셨는데, 예를들어 models/post.js에서 // 관계 설정 Post.associate = (db) => { db.Post.belongsTo(db.User); // belongsTo: 테이블에 UserId 컬럼이 생겨요 db.Post.hasMany(db.Comment); db.Post.hasMany(db.Image); db.Post.belongsTo(db.Post, { as: 'Retweet' }); // Post,Post 테이블 이름 똑같아서, 구별 안될때는 as // belongsTo: 테이블에 RetweetId 컬럼이 생겨요 db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' }); db.Post.belongsToMany(db.User, { through: 'Like', as: 'Likers' }); }; 위와같이 관계가 설정되어있는데, post와 image가 hasMany로 연결되어있는것을 확인할 수 있는데요. 이때, sequelize에서 addImage() 매서드를 만들어주는것은 이해가 되는데, 복수형인 addImages() 메서드도 이때 같이 만들어지는건가요? 즉, 항상 복수형 메서드도 같이 만들어지는것인지 궁금합니다.
- 미해결React로 NodeBird SNS 만들기
[].forEach.call 질문드립니다.
[].forEach.call(e.target.files, (f) => { imageFormData.append('image', f); // AJAX를 위해서 FormData객체에 일일히 담아준다. (SPA 유지하기 위해) // append할때 정해준 'image'라는 변수는 서버에서도 쓰이게된다. }); 오늘 처음 [].forEach.call 이라는 구문을 접하게 됐습니다. 제로초님 블로그 글을 찾아보니 유사배열에 대해 설명되어있는 글이 있어서 보고 공부해보았습니다. 글을 읽고 판단해본 결과 제 생각이 맞는지 알고싶어서 질문드립니다. 질문1) e.target.files가 '유사배열' 인듯 싶고.. 유사배열의 원소들을 가져오기 위해서는 [].forEach.call(유사배열, (원소) => { ... } ) 이런식으로 가져오는게 맞는거죠 ? 질문2) [].forEach.call 말고, Array.prototype.forEach.call로 가져와도 되는건가요 ? 안된다면 어떤이유 때문일까요 ?
- 미해결React로 NodeBird SNS 만들기
AWS Elastic Block Storage 질문입니다.
현재 aws에서 아래와 같이 Elastic Block Storage의 용량이 꽉 차면서 경고가 옵니다. 제가 제로초님 강의보면서 똑같이 노드버드를 프론트와 백엔드로 나누어서 돌리고 있는 상태인데요. (서버 실행한지 20일 정도 되었습니다.) db는 확인해본결과, 몇몇 텍스트만 쌓인게 전부라서 다른걸 의심해보는 상황입니다. Storage에 저렇게 용량이 쌓일 이유가 뭐가 있을까요? morgan을 사용해서 로그가 남아서 그런걸까요? 다양한 이유가 있겠지만, 제가 제로초님 강의를 보면서 따라했기 때문에 제로초님께서 짐작가는게 있으신지 궁금합니다. 어떤 부분을 변경해서 스토리지에 불필요한 파일들이 쌓이지 않게 해야되는지 궁금합니다. 백엔드 코드도 함께 올려드립니다. 감사합니다. const express = require("express"); const app = express(); const morgan = require("morgan"); const db = require("./models"); const cors = require("cors"); const cookieParser = require("cookie-parser"); const expressSession = require("express-session"); const dotenv = require("dotenv"); // dotdev 모듈을 불러와서 const passport = require("passport"); const passportConfig = require("./passport"); const hpp = require("hpp"); const helmet = require("helmet"); const prod = process.env.NODE_ENV === "production"; dotenv.config(); db.sequelize.sync(); passportConfig(); if (prod) { app.use(hpp()); app.use(helmet()); app.use(morgan("combined")); app.use( cors({ origin: "http://techinterview.kr", credentials: true }) ); } else { app.use(morgan("dev")); //로그 app.use( cors({ origin: true, credentials: true }) ); } app.use("/", express.static("uploads")); app.use( cors({ origin: true, //"http://localhost:3000" 로도 가능, 단 서버 재실행 하기 credentials: true }) ); app.use(cookieParser("nodebirdcookie")); app.use( expressSession({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, // 쿠키에 대한 암호화, parser에도 입력해줘야함. cookie: { httpOnly: true, secure: false, domain: prod && ".nodereactbird.kr" }, name: "rnbck" }) ); app.use(passport.initialize()); app.use(passport.session()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); const userAPIRouter = require("./routes/user"); const postAPIRouter = require("./routes/post"); const postsAPIRouter = require("./routes/posts"); const hashtagAPIRouter = require("./routes/hashtag"); const usersAPIRouter = require("./routes/users"); const commentsAPIRouter = require("./routes/comments"); const commentAPIRouter = require("./routes/comment"); app.get("/", (req, res) => { res.send("techInterview 백엔드 실행"); }); app.use("/api/user", userAPIRouter); app.use("/api/post", postAPIRouter); app.use("/api/posts", postsAPIRouter); app.use("/api/hashtag", hashtagAPIRouter); app.use("/api/users", usersAPIRouter); app.use("/api/comments", commentsAPIRouter); app.use("/api/comment", commentAPIRouter); app.listen(prod ? process.env.PORT : 3065, () => { console.log(`server is running on ${process.env.PORT}`); });