무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
client/gitignore 질문이요!
github 에 업로드 할때 server 에서 처럼 node_modules 만 client/gitignore에 추가해주면 되는건가요? git 에 올릴때 따로 더 추가해야될건 없는지 궁금하네요.. 강사님 수업 github 주소와 강의하실때 설명하시는 문서도 혹시 볼 수 있을까요? 긴 url 같은건 직접타이핑하는게 번거로워서요~ㅠ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
강사님 처럼 데이터 보려면 어떻게 해야하나요?
아래에 어떤분이 알려주신거대로 cluster에서 collection 클릭해서 들어왔는데 여기서 어떻게 보는지 모르겠어요ㅠㅜ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
Github에 올릴 시 보안문제
안녕하세요 :) MongoDB연결하는 과정에서 mongodb+srv://June:<password>@nodejspractice.ouhks.mongodb.net/<dbname>?retryWrites=true&w=majority 이 코드에서 password와 dbname을 작성해야하는데, 혹시 이것들이 Github에 올라가도 별 다른 문제는 없을까요? (AWS공부하던중 연결에 관련된 정보들은 github에 올리지 말라고 배웠어서요!)
- 해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
로그인 시 토큰을 주는 예제까지 했습니다. postman오류가 납니다.
노드 기초 강의 12번까지 진도 나간 상태입니다. 프로젝트 올라와 있는 깃허브 주소입니다. https://github.com/Judysoo/practice-plate.git dev.js에 있는 mongoURI입니다. IP제한 걸어두지 않았습니다. module.exports = { mongoURI: "mongodb+srv://JudySoo:admin@firstcluster.3mato.mongodb.net/<dbname>?retryWrites=true&w=majority", }; DB에 저장된 user정보입니다. { "name":"gogogo", "email":"joasdfda@dssdfsf.com", "password":"124755" } false를 리턴하는 경우 올바르게 출력됩니다. true를 리턴해야 하는 경우 충돌이 납니다. (nodemon없이 node만 켜도 이러한 현상이 일어납니다.) 에러메세지 전체입니다. 감사합니다.
- 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
TypeError: User is not a constructor
삭제된 글입니다
- 해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
(node:56256) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
(node:56256) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect. 콘솔에 이런에러가뜨는데 이유가 뭘까요
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
concurrently 실행 후 화면 안뜸
안녕하세요, concurrently까지 듣고 실행을 하는데 localhost:3000으로 접속했을 때, LandingPage가 뜨지 않고 아래 사진처럼 아무것도 화면에 표시가 안됩니다. 서버까지 강의 들었을 때는 다 잘 실행이 되었습니다. 제가 강의를 따라 들으며 작성한 client코드는 https://github.com/hyeriful/boiler-plate-login 에 올렸습니다. 서버코드는 제가 실수로 날려서ㅠㅠ 작성하신 코드와 동일합니다! (db연결 부분만 다른데, mongoose.connect('mongodb://localhost/userEX') .then(() => console.log('MongoDB Connected...')) .catch(err => console.log(err)); 현재 실행에서는 db는 상관없다고 생각했습니다) 문제가 있는 부분을 알려주시면 감사하겠습니다!
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
postman에서 sending request.. 문구가 뜨면서 헛돌고 있습니다
로그인을 해야되는데 저의 정보를 못받아와서 그런지 postman이 헛도는거 같아요 현재 클라우드 서버와 포스트맨 post 양식이구여 login관련 index 부분입니다 개인적으로 에러 부분을 찾을려구 console.log을 찍었봤는데 문구가 user.comparePassword 를 밑으로는 가는 순간 콘솔이 안찍히게 되더라고여 제 개인적 생각은 comparepassword나 그 이외을 것이 받아오지 못하여서 생기는 문제가 아닐까 추측을 하고 있습니다 이 문제와 관련화여 User.js가 문제 일수도 있을거 같아 전체 코들 올립니다 이거 때문에 멘붕터져서 몇일 동안 손 놓고 있었는데 어떻게 해야 하는지 알려주시면 감사하겠습니다 ㅜㅠ github 주소 https://github.com/Kimwonjin1/react-node.git
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
backend강의를 다보고 나서 질문드립니다.
강의는 잘 봤는데요. 궁금한게 있어서 질문드릴게용 userSchema.methods.generateToken = function (cb) { let user = this; // jsonwebtoken을 이용해서 token을 생성하기 let token = jwt.sign(user._id.toHexString(), "secretToken"); 여기서 갑자기 user._id가 나왓는데 user._id는 userSchema에 없는데 user._id에 대해서 설명해 줄 수 있나요? /* user._id + 'secretToken' = token => 'secretToken' => user._id */ user.token = token; user.save(function (err, user) { if (err) return cb(err); cb(null, user); }); }; //그리고 여기서는 statics를 쓰셧는데 // methods를 쓰다가 갑자기 static를 쓰신 이유도 궁금합니다. // 알긴 알겠는데 선생님의 의견이 궁금해서요 userSchema.statics.findByToken = function (token, cb) { let user = this; // 토큰을 decode 한다. jwt.verify(token, "secretToken", function (err, decoded) { // 유저 아이디를 이용해서 유저를 찾은 다음에 // 클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인 user.findOne({ _id: decoded, token: token }, function (err, user) { if (err) return cb(err); cb(null, user); }); }); };
- 해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
강사님 findByToken 메서드에 대해서 질문있습니다.
userSchema.statics.findByToken = function (token, cb) { var user = this; jwt.verify(token, "secretToken", function (err, decoded) { user.findOne({ _id: decoded, token: token }, function (err, user) { if (err) return cb(err); cb(null, user); }); }); }; 강사님 위 코드에서 jwt.verify로 토큰을 다시 복호화하여 decoded에 담은건 알겠는데 4번째 행에서 user.findOne으로 user를 찾자나요? 그때 { _id:decoded,token:token } 으로 user정보를 찾았는데 굳이 복호화 할필요없이 {token:token} 으로도 찾을 수있지 않나요?? 혹시 token이 중복이 될 수도있나요?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
nodemon 에러
안녕하세요. 강의대로 시행시 자꾸 저런 에러가 뜨는데 무엇이 문제일까요? 아무리 찾아봐도 해결방법을 모르겠네요 ㅠㅠ + node cache 등등을 지우고 node 자체를 지웠다 다시 깔아보기 + nodemon 대신 pm2 깔기 등등 해봤는데 다 안 되네요 ㅠ
- 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
[해결]npm run start 에러
삭제된 글입니다
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
npm ERR! Maximum call stack size exceeded
cd client에서 npm install react-router-dom --save 이걸 실행했더니 npm ERR! Maximum call stack size exceeded npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\smini\AppData\Roaming\npm-cache\_logs\2020-07-17T14_11_02_443Z-debug.log 요런 에러가 나왔습니다. 검색해보면 재귀함수에서 함수잘못썼을 때 나오던데 왜인지 모르겠어요 ㅠㅠ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
auth 질문
안녕하세요. 강의 내용을 통해 개인 프로젝트를 진행하며 로그인 구현을 하였습니다. 질문 내용 - admin 페이지에 접근을 막기 위해 아래와 같이 Auth를 설정하여 페이지 접근을 막았습니다. - 주소창에 /admin 작성하여 Enter를 누르면 0.5초정도 페이지가 보인뒤 Home 으로 이동시켜 주는데 0.5초정도 페이지가 안보이게끔 설정 할수는 없을까요? <Route path="/admin" component={Auth(Admin, true)} />
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
안녕하세요.
mac에서 작업하던 코드를 git을통해 그대로 window로 옮겨가서 npm으로 의존성 작업까지 다 끝냈는데요.mac에서는 아무 문제가없는데 window에서는 클라이언트의 app.css와 index.css에서 계속 failed compile 에러가 납니다. 그래서 app.css와 index.css를 import하는곳에서 막아버리면 문제없이 잘 돌아가긴합니다. 어떻게 해결할 수 있을까요?
- 해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
auth에서 x_auth를 가져오지 못하는 문제
사진과 같이 cookies로부터 x_auth를 가져오지 못하는 문제가 발생합니다. console.log(req)를 출력해보니 headers에 cookie 밑에 x_auth가 있는 형태로 보여서 아래 사진처럼 let token = req.headers.cookie.x_auth로 수정해주고 postman을 실행해보았는데요 다음과 같이 토큰이 db와 일치하는데도 에러가 발생했습니다. 어디를 수정해야할지 도저히 모르겠어서 질문 드립니다. auth.js const { User } = require("../models/users"); let auth = (req, res, next) => { // 인증 처리 하는 곳 // 클라이언트 쿠키에서 토큰을 가져온다. let token = req.cookies.x_auth; // 토큰을 복호화한 후 유저를 찾는다. User.findByToken(token, (err, user) => { if(err) throw err; if(!user) return res.json({ isAuth: false, error: true}) // req.token과 req.user에 값을 넣어주는건 이렇게 해두면 index.js의 app.get으로 req정보가 넘어올 수 있음 req.token = token; req.user = user; // next를 사용해야 app.get의 두번째 인자인 auth에서 다음 실행으로 넘어갈 수 잇게 됨 next(); }) // 유저가 있으면 인증 오케이 // 유저가 없으면 인증 ㄴㄴ } // 다른 모듈에서도 사용할 수 있게 처리 module.exports = { auth }; users.js // MongoDB Model and Schema const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); const saltRounds = 10; const jwt = require('jsonwebtoken'); const userSchema = mongoose.Schema({ name: { type: String, maxlength: 50 }, email: { type: String, trim: true, unique: 1 }, password: { type: String, minlength: 5, maxlength: 100 }, lastname: { type: String, maxlength: 50 }, role: { type: String, default: 0 }, image: String, token: { type: String }, tokenExp: { type: Number } }) userSchema.pre('save', function(next) { var user = this; if(user.isModified('password')) { // 비밀번호를 save되기 전에 암호화시킨다 bcrypt.genSalt(saltRounds, function(err, salt) { if(err) return next(err) // hash는 암호화된 비밀번호.. user.password를 암호화 하면 콜백함수에서 그걸 가져올때 hash를 사용 bcrypt.hash(user.password, salt, function(err, hash) { if(err) return next(err); user.password = hash; next(); }); }); } else { next() } }) userSchema.methods.comparePassword = function(plainPassword, cb) { // plainPassword dsgesdw 암호화된 비밀번호 $2b$10$jLkT6X2XDLVJkR33reQuRe6/lcpyg/nis7cREwAlMKDq8P9rvRZFa bcrypt.compare(plainPassword, this.password, function(err, isMatch) { console.log(plainPassword) console.log(this.password) if(err) return cb(err); cb(null, isMatch); }) } userSchema.methods.generateToken = function(cb) { var user = this; // jsonwebtoken을 이용해서 token을 생성하기 var token = jwt.sign(user._id.toHexString(), 'secretToken') // user._id + 'secretToken' = token // secretToken으로 user._id를 얻음 user.token = token user.save(function(err, user) { if(err) return cb(err); cb(null, user); }) } userSchema.statics.findByToken = function(token, cb) { var user = this; // user._id + ' ' = token jwt.verify(token, 'secretToken', function(err, decoded) { // 유저 아이디를 이용해서 유저를 찾은 다음에 // 클라이언트에서 가져온 token과 db에 보관된 토큰이 일치하는지 확인 user.findOne( { "_id": decoded, "token": token } , function (err, user) { if(err) return cb(err); cb(null, user); }) }) } const User = mongoose.model('User', userSchema); module.exports = {User} 도와주시면 감사하겠습니다ㅠㅠ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
User.js에서 ES6 사용
User.js (유저 모델) 에서는 ES6 문법을 사용하지 않는 이유는 뭔가요? 화살표함수로 작성해봤더니 제대로 동작하지 않네요.. index.js랑 어떻게 다르다고 이해하면 될까요~?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
Error: querySrv ENODATA _mongodb._tcp.cluster0.ktca5.mongodb.ne
Error: querySrv ENODATA _mongodb._tcp.cluster0.ktca5.mongodb.net at QueryReqWrap.onresolve [as oncomplete] (dns.js:203:19) { errno: 'ENODATA', code: 'ENODATA', syscall: 'querySrv', hostname: '_mongodb._tcp.cluster0.ktca5.mongodb.net' } 혹시 이 에러가 뜨시는 분이 계신다면 노드 버전을 2.2.12 or later로 전환후 소스코드를 복사한뒤에 붙여넣기 하시면 정상적으로 작동 하실거에여 혹시 무슨 이유 때문인지 아시는 분 계시면 답장 부탁드릴게요
- 해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
github 코드
안녕하세요.강의 너무 잘 듣고 있습니다.github보니 client에 들어가 있는 nav같은 게 이 강좌의 마지막과 다르던데 그건 어느 강의서 추가 되는지 알 수 있을까요? 바뀐 부분을 코드를 보고 이해하려는데 쉽지 않아서요!
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
npm cors사용시
밑의 밑의 글처럼 proxy대신 cors사용시 const request = Axios.get('/api/users/auth')를 const request = Axios.get('http://localhost:5000/api/users/auth') 로 요청하면 될까요?