수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
선생님 혹시 mySQL설치시에
Developer Default버전으로 설치하면 되나요?아니면 server only로 설치해야 되나요?그리고 설치하는 과정에서 Path Conflicts 부분중에 하단에 install Directory와 data Directory가 같은 경로로 설정이 되어있습니다그런경우 하단에 보면 노란색 느낌표 경고에 the selected path already exists라는 경고가 떠있는데다른 폴더 하나 만들어서 경로를 바꾸어 주어야 하나요?만약 경로가 똑같은 상태에서 넥스트를 누르면 you still have warnings with your selected paths, are you sure you want to continue?라는 문구가 뜨는데요제가 설치 후 자꾸 실습에서 에러나는 이유가 아마 설치과정에 있는거 같은데 원인이 뭔지 잘 모르겠습니다.
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
노드모듈스 파일에도 mysql2파일있는거 확인했는데
다시 지우고 해봐도 안되네요 이것 때문에 실습진행이 안되고 있어서요.. 그래서 의문이 드는 부분이 첫째 혹시 mySQL다운로드 받아서 설치시에 폴더는 그냥 program files폴더에 따로 경로 지정없이 설치하면되나요? 둘째 설치후 환경변수 설정같은건 건들지 않았는데 혹시 필요없나요? 셋째 강사님은 Users/zerocho폴더로 상위 폴더가 C:Users 폴더로 되어있으신데 원래 Users폴더는 만든폴더가 아닌 윈도우 자체에 있는 폴더잖아요 저는 그냥 C:드라이브 밑에 test 라는 폴더 하나 생성해서 C:testzerocho 라고 폴더 만들어서 실습중이거든요 혹시 이게 문제가 될 수도 있나요?
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
mysql설치후 시퀄라이즈 명령어에서 db:create 에러가 납니다
C:testzerocholearn-sequelize>sequelize db:createSequelize CLI [Node: 8.11.3, CLI: 5.3.0, ORM: 4.41.2]Loaded configuration file "configconfig.json".Using environment "development".ERROR: Please install mysql2 package manuallydb:create입력하면 위와 같은 에러가 뜹니다!!mysql정상적으로 설치하였고 models/index.js파일도 제대로 설정해주었고package.json 파일에도"dependencies": {"cookie-parser": "~1.4.3","debug": "~2.6.9","express": "~4.16.0","http-errors": "~1.6.2","jade": "~1.11.0","morgan": "~1.9.0","mysql2": "^1.6.4","sequelize": "^4.41.2"정상적으로 mysql2와 sequelize 설치가 되어있는데 원인을 모르겠습니다
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
v1.js => '/posts/hashtag/:title' 라우터에서 질문 입니다.
Hashtag.find 후 hashtag.getPosts() 함수를 호출 했는데요Hashtag.find함수 안에서 include 즉 join을 따로 하지 않아도 hashtag를 통해게시글 목록을 가져올 수 있나요??(즉 getPosts함수가 호출이 가능한가요?) 그 동안에는 관계를 맺어준 다른 테이블을 호출하기 위해서 include키워드를 포함한것 같아서 질문드립니다.
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
hashtag 관련 질문입니다!
post.js 라우터중 const query = req.query.hashtag; 여기 설명에 쿼리스트링으로 해시태그 이름을 받는다고 설명되어있습니다 라우터에서 따로 쿼리스트링을 require한 패키지가 없는데 어떻게 이게 가능한건가용? 그리고 라우터 코드중에 include : {} 가 있고 include: [{}] 이런식으로 두가지 방법이 있는데 어떤 차이가 있는지도 궁금합니다
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
선생님 mySQL다운을받았는데
zip archive 파일을 받았습니다 근데 압축을 푸니 설치하는 프로그램이 아니라 폴더가 생겼는데 폴더안에 설치 프로그램이나 이런게 없고 bin, docs, include, lib, share폴더만 들어있는데 어떻게 해야 하나요? 아니면 그냥 설치하라고 말씀하신게 압축풀었을때 저 폴더 자체를 말씀하신 건가요?
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
index.js에서 hasmany 릴레이션 설정이 잘못된것 같아여
안녕하세여 강사님~!관계 설정을 하고 나서 npm start를 실행하니가 에러가 발생하는데여 어디서 잘못되었는지 파악을 잘못하겠어서 검토해주시면 감사할게여~!에러 메세지와 index.js는 다음과 같습니다.error message : (base) C:fast_ajaxnpm_startlearn-sequelize>npm startlearn-sequelize@0.0.0 start C:fast_ajaxnpm_startlearn-sequelizenode ./bin/wwwsequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modulessequelizelibsequelize.js:242:13C:fast_ajaxnpm_startlearn-sequelizenode_modulessequelizelibassociationsmixin.js:13throw new Error(this.name + '.hasMany called with something that\'s not a subclass of Sequelize.Model');^Error: user.hasMany called with something that's not a subclass of Sequelize.Modelat Function.hasMany (C:fast_ajaxnpm_startlearn-sequelizenode_modulessequelizelibassociationsmixin.js:13:13)at Object. (C:fast_ajaxnpm_startlearn-sequelizemodelsindex.js:19:9)at Module._compile (module.js:652:30)at Object.Module._extensions..js (module.js:663:10)at Module.load (module.js:565:32)at tryModuleLoad (module.js:505:12)at Function.Module._load (module.js:497:3)at Module.require (module.js:596:17)at require (internal/module.js:11:18)at Object. (C:fast_ajaxnpm_startlearn-sequelizeapp.js:11:19)at Module._compile (module.js:652:30)at Object.Module._extensions..js (module.js:663:10)at Module.load (module.js:565:32)at tryModuleLoad (module.js:505:12)at Function.Module._load (module.js:497:3)at Module.require (module.js:596:17)at require (internal/module.js:11:18)at Object. (C:fast_ajaxnpm_startlearn-sequelizebinwww:7:11)at Module._compile (module.js:652:30)at Object.Module._extensions..js (module.js:663:10)at Module.load (module.js:565:32)at tryModuleLoad (module.js:505:12)npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! learn-sequelize@0.0.0 start: node ./bin/wwwnpm ERR! Exit status 1npm ERR!npm ERR! Failed at the learn-sequelize@0.0.0 start script.npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:npm ERR! C:UsershyunsepkAppDataRoamingnpm-cache_logs2018-11-11T07_15_08_813Z-debug.log===========================================================index.js============================================================const path = require('path');const Sequelize = require('sequelize');const env = process.env.NODE_ENV || 'development'; // productionconst config = require('../config/config.json')[env]const sequelize = new Sequelize(config.database, config.username, config.password, config);const db = {}db.Sequelize = Sequelize;db.sequelize = sequelize;db.User = require('./user')(sequelize,Sequelize)db.Comment = require('./comment')(sequelize,Sequelize)// db.User.hasMany(db.Comment, {foreignkey: 'name'})db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey:'id'});db.Comment.belongTo(db.User, {foreignKey: 'commenter', targetKey:'id'});module.exports = db;====
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
제로조님! 제가 블로그를 하나 작성해보려고 합니다! 관련사항 질문있습니다!
제로조님 개인 블로그 보니까 블로그를 하나 작성하는게 여러방면으로 도움이 된다는 글을 적어놓으셔서 저도 개인적으로 프로그래밍에대한 블로그를 하나 작성하고 싶은데, 노드JS관련해서 제로조님의 책을 참고하면서 블로그를 작성해도 괜찮을까요? 당연히 Node.js교과서를 참고했다는 문장을 꼭 넣도록 하겠습니다.
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
flash에 대한 질문입니다
372페이지if(!user) {req.flash('loginError', info.message);return res.redirect('/');}여기에서 req.flash(키-값)으로 저장된건req.flash(키)로 값을 불러온다고 하셨는데프론트쪽 코드 봐도 따로 그렇게 불러오는 부분이 안보여서요어떤 방식으로 저 값을 불러오는 것인가요?
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
Async / await 에 관한 질문입니다
질문. 1 교과서 66페이지 하단에 —————————————————————— async function findAndSaveUser(Users) { try { let user = await Users.findOne({}); user.name = 'zero'; user = await user.save(); user = await Users.findOne({gender: 'm'}); //생략 } catch (error) { console.log(error); } } —————————————————————— 여기에서 만약 let user = await Users.findOne({}); 이 코드가 reject 된다면 Catch에서 에러가 뜨는게 맞나요? 질문. 2 373페이지 localStategy.js 에 있는 코드중 —————————————————————— async (email, password, done) => { try { const exUser = await User.find({ where: { email } }); if (exUser) { const result = await bcrypt.compare(password, exUser.password); if (result) { done(null, exUser); } else { done(null, false, { message: '비밀번호가 일치하지 않습니다.' }); } } else { done(null, false, { message: '가입되지 않은 회원입니다.' }); } } catch (error) { console.error(error); done(error); } —————————————————————— const exUser = await User.find({ where: { email } }); Q. 1 이 코드에서 찾는 email이 없다면 exUser에는 그냥 빈 값이 담기는건지 아니면 catch로 가서 오류를 일으키는건지 궁금합니다 Q. 2 위에 있는 코드에서 어떤 경우에 catch(error)가 뜨는지 궁금합니다 Q.3 exUser.password 이 부분에서 exUser는 { where: { email } } 이렇게 이메일에 대한 정보만 받아왔는데 어떻게 .password로 비밀번호에도 접근할 수 있나요? 질문 많이 하는데 매번 친절하게 알려주셔서 감사드려요
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
hashtag 검색기능 관련 부분 질문있습니다.
해시태그 검색 하고 랜더링 하는 부분에서return res.render('main', { title: `${query} | NodeBird`, user: req.user, twits: posts, }.. 이부분에서 user: req.user이 이해가 안갑니다.제로조님이 강의에서 설명하신 것 처럼 hashtagId로 post를 찾아오고 그 포스트의 작성자까지 찾아와서 main페이지에 작성자 이름이 뜨는건 알겠는데,console.loe(req.user); 을 해도 undefined라고 나오고, console.log(req)를 해도 user객체는 포함되어있지 않은데, 대체 어떻게 req.user이 가르키는 것이 유저의 닉네임인가요?제가 혼란스러운 이유는, 앞부분의 강의까지는 req.user가 로그인 성공 시 deserializeUser 메서드를 호출하면서 유저의 정보가 req.user에 담긴다고 설명해주셨고 책에 그렇게 적혀있는데..로그인을 안한 상태에서 req.user 값이 나타난다는것에 혼란스럽습니다 ㅎㅎ항상감사합니다!
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
views/sequelize.pug의 form 부분에 action이 없는 이유는 뭔가요?
안녕하세요. 항상 좋은 강좌 잘 듣고 있습니다.호주 귀국 하루전에 우연히 서점에 들려서 펼처봤는데 내용이 너무 좋아서, 동영상 강좌도 듣고 있습니다. 질문이 있는데 form 에 관한 부분입니다. 제가 기억하기로는 form은 action 부분이 있어야 어디로 보내는지를 설정할 수 있는데 본문의 sequelize.pug에 있는 form에는 action이 들어있지 않네요. 특별한 이유가 있나요?없어도 처리가 된다면 어떤 원리도 처리가 되나요?이하는 코드 전문입니다. doctype htmlhtml head meta(charset='utf-8') title 시퀄라이즈 서버 style. table { border: 1px solid black; border-collapse: collapse; } table th, table td { border: 1px solid black; } body div form#user-form fieldset legend 사용자 등록 div input#username(type="text" placeholder="이름") div input#age(type="number" placeholder="나이") div input#married(type="checkbox") label(for="married") 결혼 여부 button(type="submit") 등록 br table#user-list thead tr th 아이디 th 이름 th 나이 th 결혼여부 tbody for user in users tr td= user.id td= user.name td= user.age td= user.married ? '기혼' : '미혼' br div form#comment-form fieldset legend 댓글 등록 div input#userid(type="text" placeholder="사용자 아이디") div input#comment(type="text" placeholder="댓글") button(type="submit") 등록 br table#comment-list thead tr th 아이디 th 작성자 th 댓글 th 수정 th 삭제 tbody script(src='/sequelize.js')
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
main.pug 중간에 if 문에 대해서 궁금한 것이 있습니다.
if user && user.id !== twit.user.id && !follow위의 if 조건문에 따라서 팔로우하기 버튼이 보이고 안보이고가 정해지는데저 조건문에서 조건을 따지는 순서나 방법이 궁금합니다!== 연산자의 순위가 &&보다 높으니 user.id !== twit.user.id 먼저 비교를 하고if user && 결과 && !follow 이 상태에서 앞에서 차례로 true, false를 따져주면 되는건가요?ㅠㅠ 헷갈립니다 도와주세요!
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
선생님 노드 cli프로그램만들기 보다가 궁금한점이 생겼는데
path와 directory의 차이가 뭔가요?둘다 경로를 말하는 건 알겠는데 차이를 모르겠습니다.어떤때에 어떤걸쓰는지 궁금합니다
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
parseCookie 부분에 대해 질문 있습니다.
ParseCookies=(cookie~ 로 시작하는 부분에 질문있습니다.이게 쿠키 property를 받아서 나누고 쪼개는 역할을 하는 거 같은데요, 처음에 (cookie = '') => 이 부분은 기본 쿠키값이 비어있게 설정하는 건가요?쿠키를 ; 로 나누고, 그다음 = 으로 나눈 후에, 인자 "k" 부분 부터 이해가 안갑니다.여기서 인자 k는 뭔가요 ㅇ,.ㅇ;마지막에 reduce를 해 주는 곳에서 인자 갑자기 "acc" 가 나오는데, 이 친구는 뭐를 가르키는 건가요?이하는 쿠키 부분의 코드 입니다. const parseCookies = (cookie = '') => cookie .split(';') .map(v => v.split('=')) .reduce((acc, [k, v]) => { acc[k.trim()] = decodeURIComponent(v); return acc; }, {});이하는 코드 전문입니다. ```const http = require('http');const fs = require('fs');const url = require('url');const qs = require('querystring');const parseCookies = (cookie = '') =>cookie.split(';').map(v => v.split('=')).reduce((acc, [k, v]) => {acc[k.trim()] = decodeURIComponent(v);return acc;}, {});const session = {};http.createServer((req, res) => {const cookies = parseCookies(req.headers.cookie);if (req.url.startsWith('/login')) {const { query } = url.parse(req.url);const { name } = qs.parse(query);const expires = new Date();expires.setMinutes(expires.getMinutes() + 5);const randomInt = +new Date();session[randomInt] = {name,expires,};res.writeHead(302, {Location: '/','Set-Cookie': session=${randomInt}; Expires=${expires.toGMTString()}; HttpOnly; Path=/,});res.end();} else if (cookies.session && session[cookies.session].expires > new Date()) {res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });res.end(${session[cookies.session].name}님 안녕하세요);} else {fs.readFile('./server4.html', (err, data) => {if (err) {throw err;}res.end(data);});}}).listen(8084, () => {console.log('8084번 포트에서 서버 대기중입니다!');});
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
mongoose.pug에 관한 질문입니다
프론트에 대한 질문인데요퍼그 내용중에 이런 코드가 있습니다for user in userstrtd= user._idtd= user.nametd= user.agetd= user.married ? '기혼' : '미혼'콘솔을 찍어보니 users는 [{}, {}, {}] 이런식으로 배열안에 객체가 담겨서 오는데user.name 과 같은 방법으로 어떻게 값을 가지고 오는건지 궁금합니다for in 문에 대해서 검색을 해보았는데 시원한 답을 찾지 못해서요 ㅜ
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
nested와 관련해서 질문있습니다!
책 기준 9장 SNS만들기를 공부하면서 쿼리문에 대해서 궁금한것이 생겨서 다시 7장에 오게되었습니다. 우선 9장 에서 궁금했던 부분들은 routes/page.js에서 order: [['createAt', 'DESC']] 이 부분에 대한 차이가 궁금합니다. ['createAt', 'DESC'] 과 [['createAt', 'DESC']]의 차이입니다. 두번째로 routes/post.js에서 posts = await hashtag.getPosts({include: [{model: User}]}); 이부분에서 또 한 {model: User}가 왜 배열 안으로 들어갔는지 궁금합니다 ㅎㅎ 감사합니다!
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
289p users 와 user 가 헷갈려서요
질문1271페이지 하단에 //시퀄라이즈는 기본적으로 모델 이름은 단수형으로, 테이블 이름은 복수형으로 사용합니다// 라고 쓰여있는데요 이것때문에 시퀄라이즈에서는 user 라고 했지만 테이블에는 자동적으로 users라고 저장이 되는것인지요질문2289페이지 routes/index.js 에 시퀄라이즈에서는 user라고 정의했지만res.render('sequelize', { users }); 이 부분에서는 users라고 되어있어서 헷갈립니다 ㅜ한마디로 user와 users가 헷갈리는데 어떻게 정리하면 이해가 잘 될까요
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
에러 처리에 관해 질문 있습니다.
1.에러 처리 부분에서 질문 있습니다.강좌중에 말씀하시,app.use((req.res.next) =>{res.status(404).send(‘Not Fount’); })이 코드 대로라면, 라우터들이 실행되고, 마지막에는 결국 위의 라우터까지 도달하기 때문에,무조건 ‘not fount’ 가 실행 되어야 하는 거 아닌가요? 미들웨어들은 순서대로 계속 실행되니까요. 그리고 위에, 404 자리에, 505나 다른 숫자들을 집어 넣으면 다른 에러들도 커버가 되는 건가요?404에러를 커버하기 위해서는 위의 app.use가 404 에러를 디덱팅하는 방법이 있어야 하는데 위의 코드에서는 res.status, 즉 그냥 응답하라는 말만 있어서요.또 위의 코드는 아래의 애러 핸들러와는 독립적으로 움직인다고 보면 되겠죠?그러나 만약, next('Not Found')를 넣으면 이것도 아래의 애러 핸들러로 가는 거죠? app.use(function(err, req, res, next){res.status(500).send(‘Server Error’);})http-errors(createError)를 사용 했들때(책에 나온 예제).책에는서는 (페이지 197)app.use(function(req, res, next){next(createError(400));})을 사용했을 경우에는 저기서 만들어진 에러 코드가 에러 헨들러로 보낸다고 나와 있습니다.1번과 비슷한 질문인데, 위의 코드 상에서는 어떤 에러를 어떻게 디텍팅하는 거죠? 코드 상에서는 req, res, next 인데, req 인자를 사용한 것도 아니고, 바로 에러를 만들어서 쏴주는 거 같아서요. 혹시 위의 코드와는 상관 없이 무조건 적으로 에러들을 만들어 놓고 대기하고 있다가, 발생하면 디텍팅해서 "에러핸들러" 쪽으로 넘기는 코드 인가요?항상 좋은 강좌 잘 보고 있습니다.감사합니다.
- 미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
req.params 한글 깨짐 현상과 카카오 로그인 CORS 에러 현상 질문입니다
1) 해쉬 검색 기능을 책에 있는 데로 비슷하게 구현 해봤습니다. 그런데 한글 해쉬의 경우는 검색이 안됩니다. app.use(express.json()) app.use(express.urlencoded({ extended: false })) post.js 라우터에서 router.get('/:hash', async (req, res, next) => { .... req.params.hash 의 값을 콘솔로 찍어보니 숫자는 읽히는데 한글이 특수문자로 읽힙니다 . morgan 로그가 찍어주는 콘솔도 살펴보니 GET /post/t@3 이런식으로 깨져서 나옵니다. 어떻게 해야할까요? 2) 프론트와 서버가 나뉘어져 있는데, 서버 쪽에서 GET /kakao 라우터를 만들고, 프론트(크롬브라우저)에서 GET /kakao 로 request를 보내면 CORS 에러가 납니다. 제 서버에서 아무리 app.use(cors()) 혹은 router.use(cors()) 를 해봐도 cors 에러가 여전히 적용되서, 카카오 서버 쪽에서 cors 에러 처리가 안되어 있어 생기는 오류인 것 같은데 맞나요? (참고로 프론트 쪽에서는 axios로 request를 보내고 있습니다) 이런 경우에는 어떤 방식으로 해결해야 좋을까요?