49,500원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
노드 삭제 재설치
그러면 안되지만 잘못 설치했을경우 노드 삭제 재설치 및 버전 업데이트 하는 방법에 대해서 혹시 유튜브에라도 해당 내용이 있을실까요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
저는왜 렌더링 화면이 다를까요 ?
저는 이 화면으로만 보이고 domain 적는 구간이없는데.. 왜그럴까요 계속 로그인 상태 알람만 발생합니다. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>API 서버 로그인</title> <style> .input-group label { width: 200px; display: inline-block; } </style> </head> <body> {% if user and user.id %} <span class="user-name">안녕하세요! {{user.nick}}님</span> <a href="/auth/logout"> <button>로그아웃</button> </a> <fieldset> <legend>도메인 등록</legend> <form action="/domain" method="post"> <div> <label for="type-free">무료</label> <input type="radio" id="type-free" name="type" value="free"> <label for="type-premium">프리미엄</label> <input type="radio" id="type-premium" name="type" value="premium"> </div> <div> <label for="host">도메인</label> <input type="text" id="host" name="host" placeholder="ex) zerocho.com"> </div> <button>저장</button> </form> </fieldset> <table> <tr> <th>도메인 주소</th> <th>타입</th> <th>클라이언트 비밀키</th> </tr> {% for domain in domains %} <tr> <td>{{domain.host}}</td> <td>{{domain.type}}</td> <td>{{domain.clientSecret}}</td> </tr> {% endfor %} </table> {% else %} <form action="/auth/login" id="login-form" method="post"> <h2>NodeBird 계정으로 로그인하세요.</h2> <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> <div>회원가입은 localhost:8001에서 하세요.</div> <button id="login" type="submit">로그인</button> </form> <script> window.onload = () => { if (new URL(location.href).searchParams.get('error')) { alert(new URL(location.href).searchParams.get('error')); } }; </script> {% endif %} </body> </html> view에 login도 위와 같이 들어가있습니다.const { User, Domain } = require("../models"); const { v4: uuidv4 } = require("uuid"); exports.renderLogin = async (req, res, next) => { try { const user = await User.findOne({ where: { id: res.user?.id || null }, include: { model: Domain } }) res.render("login", { user, domains: user?.Domains }) } catch (err) { console.error(err) next(err); } } exports.createDomain = async (req, res, next) => { try { await Domain.create({ UserId: req.user.id, host: req.body.host, type: req.body.type, client: uuidv4() }) res.redirect("/"); } catch (err) { console.error(err); next(err); } } controller에서도 강의대로 잘 렌더가 들어가있습니다. 그러니 화면이 보이긴하는데 왜 저만안보일까요..- app.js에 passport의 initialize(), session() 함수 선언되어있습니다. - cookie도 있습니다.- db에 user도 있습니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
api호출 제한이 안되는 질문에서 제로초님이 제공해주신 코드중에서의 질문입니다!
해당 질문에서 제로초님이const limiter = rateLimit({ widowMs: 60 * 1000, max: (req, res) => { if (req.user?.type === 'premium') { return 10 } return 1; }, handler(req, res) { res.status(this.statusCode).json({ code: this.statusCode, message: `1분에 ${req.user?.type === 'premium' ? '열' : '한'} 번만 요청 할 수 있습니다...`, }); }, }); exports.apiLimiter = async (req, res, next) => { let user; if (res.locals.decoded) { user = await User.findOne({ where: { id: res.locals.decoded.id } }); } req.user = user; limiter(req, res, next); };이렇게 주셨는데 여기서 limiter을 상수형태로 참조하게끔하면 그럼 다수의 유저가 호출을 하게 될때limiter이 같은 함수를 가르키고있어서 다른 유저가 호출한 api횟수에 영향을 받게 되지않나요? 강의 너무 잘보고있습니다!
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
서버 배포 후 api 연동 시에 net::ERR_CONNECTION_REFUSED 에러가 나옵니다
안녕하세요 제로초님! 항상 좋은 강의 올려주셔서 감사합니다 제로초님 강의를 그대로 따라하다가 react로 혼자 프론트를 만들어서 api 연동 웹사이트를 만드는 중입니다. 서버 배포까지 마쳐서 pm2 list 해도 재시작 0회로 잘 올라가 있는 상황입니다! 그런데 프론트에 서버 주소를 입력해서 테스트를 해보니 아래와 같은 에러가 나옵니다. (프론트는 아직 localhost를 사용하고 있습니다) 프론트에서는 아래와 같이 주소를 연동해서 사용했습니다export const url = "http://106.10.34.138"; 강의 때 백엔드에 8002 포트 설정을 해줬어서 :8002를 붙여봤지만 동일한 오류가 나왔습니다 프론트, 서버 둘다 cors 에러가 나올까봐 아래처럼 cors 설정도 해줬습니다//프론트 headers: { "Access-Control-Allow-Origin": "*", },app.use( cors({ origin: "*", credentials: true, }) ); 이제 잘 되는지만 테스트 하면 되는 단계인데 여기서 막혀서 도저히 해결이 안되네요 이런 경우에 어떻게 해결할 수 있는지 알려주시면 감사하겠습니다! 늘 좋은 강의 감사합니다
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
React나 Vue 사용 시 렌더링 질문
서버 사이드 렌더링은 넌적스나 도그스 보니까 이해가 됩니다.React,Vue를 원래 실무에서 사용한다는 뜻은 혹시 클라이언트 사이드렌더링에 관점에서 말씀하신건지 궁금합니다. 서버사이드렌더링 처럼 데이터를 넣어서 static 파일 전달하는 형태를 말씀하신거라면 방법이 궁금합니다 !
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
노드 비동기 동작 질문
0. 대부분 무거운 연산이나 오래걸리는 일들을 비동기로 보내는 것으로 이해했습니다. 그런데 결국 비동기요소들이 Background 대기 후 Task Queue으로 이동 후 Stack이 비었는지 확인 하고 Stack에 이동하여 진행되는 것일 텐데 이것들이 동시에 처리되는 것이라고 볼 수 있나요 ? 아니면 Background에 있는 동안 Promise와 같은 비동기 요소들이 백그라운드에서 동시에 Logic이 처리되고 Queue로 resolve혹은 reject의 값이 Stack으로 넘어가나요 ? 구체적인 동작방식이 궁금합니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
넌적스로 {% include .html} 시 template not found 오류
안녕하세요, 변수에 할당되는 값에 따라서 html 파일을 다르게 include 하고 싶은데,template not found 오류가 뜹니다. 처음에 변수에 값을 넘기고 app.js에서 렌더링할 때 하기와 같이 설정했습니다. 그 뒤, index.html 에해당 코드를 추가하여 viewAlimtalk에 값이 있다면 test.html을 include할 수 있도록 하였습니다. 그런데 오류는 index 템플릿을 찾을 수 없다고 뜹니다. Error: template not found: index at Object._prettifyError (C:\alimtalk\node_modules\nunjucks\src\lib.js:32:11) at C:\alimtalk\node_modules\nunjucks\src\environment.js:464:19 at eval (eval at compile (C:\alimtalk\nodemodules\nunjucks\src\environment.js:527:18), <anonymous>:22:11) at C:\alimtalk\node_modules\nunjucks\src\environment.js:471:11 at eval (eval at compile (C:\alimtalk\nodemodules\nunjucks\src\environment.js:527:18), <anonymous>:16:11) at createTemplate (C:\alimtalk\node_modules\nunjucks\src\environment.js:238:11) at next (C:\alimtalk\node_modules\nunjucks\src\lib.js:260:7) at handle (C:\alimtalk\node_modules\nunjucks\src\environment.js:267:11) at C:\alimtalk\node_modules\nunjucks\src\environment.js:276:9 at next (C:\alimtalk\node_modules\nunjucks\src\lib.js:258:7) index.html에 {% include "test.html" %} 코드를 지우고 실행하면 해당 오류는 없이 index.html이 잘뜨게됩니다 .. 파일구조는 views index.htmltest.html로 되어있고, 넌적스 configure도 views 파일로 설정하였습니다. 왜이런 오류가 뜨게 되는걸까요?? if 값에 따라 html을 동적으로 삽입할 수 있는 다른 방법이 있을까요? 혹은, 버튼 클릭 시 router 을 통한 render가 아닌 바로 넌적스 변수를 변경할 수 있는 코드를 작성할 수는 없을까요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
ws 프로토콜 연결시 사이트 연결할 수 없음 메세지가 나오고 페이지 호출이 되지 않습니다.
브라우저 사파리에서는 정상동작 합니다참고로 크롬 버젼은 123.0.6312.107(공식 빌드) (arm64)맥에서 실행했습니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
9장 스스로하기 캐싱문제..
지금까지 9장 스스로하기 문제들을 겨우겨우 해결해 나가고 있는데요, 그래도 다른 것들은 제로초님의 강의를 돌려보면서 검색과 함께 해볼만한 난이도였지만, 마지막 캐싱은 어떻게 해야할지 감도 안잡힙니다. 객체를 선언하라는 것도 전역변수에 User 배열을 선언해서 전부 집어넣고 Post도 배열을 만들어서 집어넣으라는 소린지.. 만약 만든다면 어떤 파일에 전역변수를 선언해야할까가 문제입니다. ㅜ 쓰이는 곳도 많아서 쓰이는 곳 마다 해당 파일에 전역변수를 설정해야할까요?
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
좋아요 기능 구현중
models/user에서 static associate(db){ db.User.belongsToMany(db.Post,{ foreignKey: 'postId', as: 'LikedPosts', through: 'Like', }); } 그리고 models/post에서static associate(db){ db.Post.belongsToMany(db.User,{ foreignKey: 'userId', as: 'LikingUsers', through: 'Like', }); }이렇게 해놓았는데이러면 좋아요와 좋아요취소기능은 잘 작동하고 이를통해 프로필을 볼때 사용자가 좋아요한 게시글들만 볼 수 있는 기능도 잘 작동합니다.하지만 mysql workbench를 보면이와같이 userId에 post의 Id가, postId에는 userId가 들어가있는데요, 그래서 foreignKey를 post에선 postId로, user 에선 userId로 바꿨더니 Like 테이블에 삽입하려는 postId가 users 테이블의 id와 관련하여 참조 무결성 제약 조건을 위반했다는 오류가 뜹니다! ㅜ왜이런 현상들이 일어나는지 검색을 해도 안나와서 여쭤봅니다!
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
res.locals에 follower에 관해 저장할때 다른방법
수업중에서 res.locals에 follower에 관해 저장할때 deserialize 에서 include를 하면서 req.user에 추가를 해주었는데요,제로초님이 await으로 userfindOne을 해서 어떻게 하는 다른방법도 있다고 하셨는데 그 코드를 알려줄수있을까요?저 혼자 해보는데 잘 안되네요.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
upload2를 안쓰고 그냥 해도 되지않나요?
강의중 제로초님이 routes폴더의 post.js를 작성하실때const upload2 = multer();router.post('/', isLoggedIn,upload2.none(), uploadPost);이렇게 작성하셨는데,그냥 router.post('/', isLoggedIn, uploadPost);로 작성해도 되지않나요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
참조 테이블 생성시 카멜케이스 형태로 , 테이블이 생성이 됬는데 상관없을까요?
참조 테이블 : Follow , PostHashtag 관계를 맺을때 throught 테이블에 카멜 케이스로 테이블을 작성해서 그런거 같은데 , git 소스 원본에도 해당 내용으로 작성되어 있습니다. 영상 가의 마지막 31:53에 테이블이 소문자로 작성된 내용을 보고 질문드립니다 .
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
app.js 데이터 베이스 연결시 질문 있습니다 ( sync 옵션 )
[제로초 강좌 질문 필독 사항입니다]app.js 에서 데이터 베이스 연결시 sync에 ({force:false} ) 를 안붙였는 데도 테이블이 새로 생성이 안되더라구요 기본값이 아무것도 입력안하면 기본값이 false 로 생각하면 되나요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
app.js 실행순서
app.js 실행순서여러개의 라우터 app.get()이 있고미들웨어,listen이 있을경우1.listen 실행2.미들웨어 실행(next가 있어야 라우터가 실행된다)3.이때 라우터는 클라이언트가 전송한 주소를 위에서 부터 밑으로 확인해서 적합한 라우터 실행이런 순서라면 listen이 젤위에 있어야하는거 아닌가요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
my sql 접속오류
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c에러 해결하기위해 권한 방화벽등 구글링으로 해결하려 했지만 계속 접속오류가 나네요힘들어요데이터베이스 Access denied for user 'root'@'localhost' (using password: YES)힘들다 갑자기 이 오류가 뜬다 권한에 관한 오류인거 같다그래서 데이터베이스 sql을 명령 프롬프트에서 들어가기위해 관리자 권한으로 실행'mysql 은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.ㅋㅋㅋㅋㅋㅋ새로운 오류이거는 환경변수에 들어가 Path설정 해결~이제 다시 접근 mysql 127.0.0.1 -u root -p로 접근하니 오류-u root -p 오해결이제 권한을 부여해준다 root에게GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;GRANT ALL PRIVILEGES ON *.*: 모든 데이터베이스의 모든 테이블에 대한 모든 권한을 부여합니다.'root'@'localhost': 'root' 사용자에게 'localhost'에서의 접속에 해당하는 권한을 부여합니다. 만약 원격에서의 접속도 허용하려면 **'%'**로 변경할 수 있습니다.WITH GRANT OPTION: 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 부여합니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
옵셔널 체이닝 문법에서 에러가 나요
옵셔널 체이닝을 인식할수가 없는데 vscode에서 어덯게 새팅해야하나요? 그리고 ctrl + s 하면 저 부분이 자꾸 띄워지는데 띄워지는것도 어덯게 해결이 가능할까요?찾아보니깐 루트에다가 jsonconfig.json 추가하면 된다고 하는데 해봣는데 안돼고, 어디서는 onsave 어디 건들면 된다는데 해봤는데도 안되더라고요... 혹시 선생님께서 아실까요?C:\Users\dongw\Desktop\nodejs\nodeJsSNS\routes\page.js:11res.locals.followerCount = req.user ? .Follower.length;^SyntaxError: Unexpected token '.'at internalCompileFunction (node:internal/vm:73:18)at wrapSafe (node:internal/modules/cjs/loader:1176:20)at Module._compile (node:internal/modules/cjs/loader:1218:27)at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)at Module.load (node:internal/modules/cjs/loader:1117:32)at Module._load (node:internal/modules/cjs/loader:958:12)at Module.require (node:internal/modules/cjs/loader:1141:19)at require (node:internal/modules/cjs/helpers:110:18)at Object.<anonymous> (C:\Users\dongw\Desktop\nodejs\nodeJsSNS\app.js:20:20)at Module._compile (node:internal/modules/cjs/loader:1254:14)Node.js v18.16.0
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
미들웨어 확장 패턴 적용 이후 api 제한이 안되는 이슈가 있습니다
미들웨어 확장 패턴 적용 이전에는 api호출 횟수를 넘어서면 handler()함수에 적어넣은 부분이 잘 동작합니다하지만 적용 이후에는 왜 인지 동작하지 않습니다.어떤 이유일까요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
혹시 제로초님 webstorm 세팅을 알 수 있을까요?
저번에 Unresolved variable 워닝이 뜬다고 했던 수강생입니다.저 워닝 안 뜨게 하려고 종일 구글링했는데도 해결 방법을 못 찾았습니다 ㅠㅠ제로초님 강의에서는 함수로 잘 인식하던데 혹시 수고롭지 않으시다면 webstorm 세팅을 알려주실 수 있나요?Settings에서 Languages & Frameworks => JavaScript => Libraries에 Node.js Core도 체크되어 있고 구글에서 하라는 건 다 해봤는데 안 되네요 ㅠㅠmodels/index.js에서 const sequelize = new Sequelize(~~); 에서 Sequelize도 constructor가 아닌 function으로 인식하네요따로 설정 안 하셨다면 어쩔 수 없지만 혹시 따로 세팅하신 게 기억이 나신다면 공유해주시면 감사하겠습니다
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
자바스크립트 특성상 무시해도 되는 경고일까요?
9장 노드버드 만들기의 두 번째 강의 - 데이터베이스 세팅하기에서 경고가 떠서 질문드립니다.models/user.js 입니다.유니티와 c#으로 게임 개발 하다가 비동기 서버를 공부 하려고 제로초님 강의를 듣고 있는데요, 이번에 자바스크립트를 처음 접했습니다. 보통 다른 언어에서는 함수의 매개변수에 자료형을 명시해주는데, 자바스크립트에서는 변수명만 선언하는 거 같더라구요.그래서 db에 User라는 변수가 있는지 알 수 없어서 경고가 뜨는 거 같은데, 무시해도 되는 경고일까요?아무래도 저런 경고가 뜨면 찝찝해서요 ㅠㅠ그리고 필드 검색이 안 되니 자동 완성도 안 돼서 불편한 점도 있네요. index.js에서 User를 비롯한 model들을 직접 선언해주고 초기화 할 때는 저 경고가 안 떴는데, model들을 자동화하도록 코드 수정하시는 부분 따라한 이후에 위 경고가 뜨게 됐습니다.IDE는 Webstorm이고, npm start는 정상적으로 작동합니다.자바스크립트는 참 신기한 언어군요..