수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
commenter관련 질문있습니다.
코멘트.js에서 static associate(db) { db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' }); } 유저.js에서 static associate(db) { db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' }); } 이렇게 작성했는데... comment 모델에 commenter가 생성된 것을 보면, 1:N중 N에 해당하는 belongsTo에 foreignKey가 생성되는 것으로 생각하면 되나요?? ㅇ
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
res.redirect가 작동하지 않습니다..ㅠㅠ
로그인이 성공하면 res.redirect('/')를 해서 메인 페이지로 돌아가야 하는데 돌아가질 않습니다.. 왤까요???ㅠㅠ
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
app crashed - waiting for file changes before starting 오류에 대해서
강의를 듣다가 해당 에러가 나시는 분들을 위해 app.use("/", express.static(__dirname, "public-test")); 이 부분에서 계속 오류가 나는 현상을 보실 수 있으실 겁니다. 일단 해당 코드를 app.use("/", express.static(__dirname + "public-test")); 라고 변경해주시면 동작 하실겁니다. ,(쉼표)를 +(더하기)기호로 변경 해주시기 바랍니다. 저도 왜 안되는지 계속 의문점이 들다가 express 공식문서를 찾아봤습니다. https://expressjs.com/ko/starter/static-files.html 해당 파일 가장 하단에 app.use('/static', express.static(__dirname + '/public')); 해당하는 코드가 있었고 해당 코드를 통해서 에러를 해결할 수 있었습니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문입니다
1. mysql -h localhost -u root -p 치고 비번 입력하면 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 이렇게 뜨는데 어떻게 해야하나요? 심볼릭 링크도 걸어봤지만 실패했습니다 2. mysql 대신 mariadb로 해도 상관없나요? 감사합니다!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
Error : Invalid Character entity
안녕하세요! 미들웨어로 express-xml-bodyparser 를 사용중인데요. ---------------------------------------------------------- Error: Invalid character entity Line: 6 Column: 31 Char: ; at error (C:\TEST_WATER\waterpump-nodeVer\node_modules\sax\lib\sax.js:651:10) at strictFail (C:\TEST_WATER\waterpump-nodeVer\node_modules\sax\lib\sax.js:677:7) at parseEntity (C:\TEST_WATER\waterpump-nodeVer\node_modules\sax\lib\sax.js:937:7) at SAXParser.write (C:\TEST_WATER\waterpump-nodeVer\node_modules\sax\lib\sax.js:1485:31) at Parser.exports.Parser.Parser.parseString (C:\TEST_WATER\waterpump-nodeVer\node_modules\xml2js\lib\parser.js:323:31) at Parser.parseString (C:\TEST_WATER\waterpump-nodeVer\node_modules\xml2js\lib\parser.js:5:59) at IncomingMessage.<anonymous> (C:\TEST_WATER\waterpump-nodeVer\node_modules\express-xml-bodyparser\lib\types\xml.js:99:14) at IncomingMessage.emit (events.js:194:15) at endReadableNT (_stream_readable.js:1125:12) at process._tickCallback (internal/process/next_tick.js:63:19) ---------------------------------------------------------- 이런 에러가 나오는데 구글에 검색을 해봐도 에러를 어떻게 해결해야할지 막막하네요. 이 에러가 보통 어떤 경우에 생기는지 알 수 있을까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
궁금한게 생겨 문의드립니다.
시퀄라이즈 테스트를 하고 있습니다. 게시물(1) : 댓글(N) 을 만들어보고 싶어서 static associate(db) { db.Reply.belongsTo(db.Post, { foreignKey: "postId", targetKey: "id", }); } static associate(db) { db.Post.hasMany(db.Reply, { foreingnkey: "postId", sourceKey: "id" }); } 이렇게 배운대로 작성한 뒤, 값을 콘솔로 찍어보니 요런 형태로 나옵니다. 1. 제가 Replies는 안 만들었는데, 자동으로 생성된건가요? 2. 클라이언트에서 이 값을 사용하고 싶다면...어떻게 호출을 해야하나요? 도와주세요 감사합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
안녕하세요 질문드립니다!
11분 30초쯤에 10초 걸리는 웹을 100명이 동시에 접속했을 시에 100번째 사람은 10,000초 걸린다고 하셨는데 그러면 동시접속자 중에서도 선착순으로 실행이 먼저 되는건가요? 친구랑 웹사이트를 방문했을때 컴퓨터 성능에 따라서 먼저 접속했음에도 더 늦게 뜨는 경우와 위의 경우랑은 별개로 생각해야하는건가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
에러처리 미들웨어 이젠 작동 안하나요?
삭제된 글입니다
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
Test function cannot both take a 'done' callback and return something 에러
supertest를 이용해서 통합테스트를 하는데 Test functions cannot both take a 'done' callback and return something. Either use a 'done' callback, or return a promise. Returned value: Promise {} 이런 에러가 뜹니다. 에러 메시지에 나온대로 async나 Promise 중에 하나만 써야하는 것 같아서 auth.test.js 코드에서 async를 뺐더니 일단 에러메시지는 사라지더라고요. 이게 버전이 바뀌면서 새로 생긴 것인가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
TypeError: Cannot read property 'color' of undefined
/Users/mono/dev/node/zerocho/websocket/socket.js:34 chat: `${req.session.color}님이 입장하셨습니다.`, ^ TypeError: Cannot read property 'color' of undefined at Namespace.<anonymous> (/Users/mono/dev/node/zerocho/websocket/socket.js:34:28) 이렇게뜨는데 이유를 모르겠습니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
마이크로 태스크로 들어가는 콜백함끼리는 순서대로 실행되는게 맞나요?
강의에서 마이크로 태스크로 들어가는 콜백함수끼리는 순서대로 실행된다고 하셨는데 실행 했을때, 순서 상관없이nextTick이 우선적으로 실행됩니다. Promise.resolve().then(() => console.log("promise")); process.nextTick(() => console.log("nextTick")); //nextTick //promise 또, promise의 then안쪽에서 console.log를 바로 실행했을때는 순서 상관없이 promise가 우선적으로 실행됩니다 ㅠㅠ Promise.resolve().then(console.log("promise")); process.nextTick(() => console.log("nextTick")); //promise //nextTick
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
제 예상과 다르게 응답을 하고 있습니다
제 index.js 파일 일부입니다. app.use(express.static(path.join(__dirname + '/public'))); app.get('/', (req, res) => { console.log('메인페이지 겟요청'); res.send('hi'); //res.sendFile(path.join(__dirname, '/public/index.html')); }) 위와 같이 작성 후 localhost:3000/ 에 접속하면 저는 hi를 받을 줄 알았는데 public 폴더에 있는 Index.html 을 응답받습니다. 그리고 express.static 부분을 주석처리하면 그제서야 hi를 응답받는데, 이유가 무엇일까요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
카카오 로그인 내부 동작 순서 관련 질문입니다.
// auth.js router.get('/kakao', passport.authenticate('kakao')); router.get('/kakao/callback', passport.authenticate('kakao', { failureRedirect: '/', }), (req, res) => { res.redirect('/'); }); // kakaoStrategy.js module.exports = () => { passport.use(new KakaoStrategy({ clientID: process.env.KAKAO_ID, callbackURL: '/auth/kakao/callback', }, async (accessToken, refreshToken, profile, done) => { console.log('kakao profile', profile); try { const exUser = await User.findOne({ where: { snsId: profile.id, provider: 'kakao' }, }); if (exUser) { done(null, exUser); } else { const newUser = await User.create({ email: profile._json && profile._json.kakao_account_email, nick: profile.displayName, snsId: profile.id, provider: 'kakao', }); done(null, newUser); } } catch (error) { console.error(error); done(error); } })); }; 위의 코드는 질문과 연관된 코드로 질문의 이해를 돕기위해 첨부하였습니다 다음은 카카오톡 로그인 버튼을 눌렀을 때, 정상적으로 로그인 인증이 진행되는 과정에서 콘솔에 찍히는 로그입니다. 각 로그의 구분을 위해서 1~5번까지 번호를 순서대로 매겼습니다. // (1) GET /auth/kakao 302 4.599 ms - 0 // (2) kakao profile { provider: 'kakao', id: 1807557207, // 생략 } // (3) Executing (default): SELECT `id`, `email`, `nick`, `password`, `provider`, `snsId`, `createdAt`, `updatedAt`, `deleteddAt` FROM `users` AS `User` WHERE (`User`.`deletedAt` IS NULL AND (`User`.`snsId` = 1807557207 AND `User`.`provider` = 'kakao')) LIMIT 1; // (4) GET /auth/kakao/callback?code=AqnOGyk-OUAvtmCijPwAZZL9Xv6LaN_C1p0f5hSQDpgN2pq9hLJIx_rAAN3-bJJ9DQQgUgopdSkAAAF6qRsigA 3 302 288.890 ms - 46 // (5) Executing (default): SELECT `id`, `email`, `nick`, `password`, `provider`, `snsId`, `createdAt`, `updatedAt`, `deleteddAt` FROM `users` AS `User` WHERE (`User`.`deletedAt` IS NULL AND `User`.`id` = 2); 강의를 보며 카카오 로그인 과정을 이해하기로는1. `GET /auth/kakao` 요청2. 카카오 로그인 페이지로 리다이렉트, 로그인 및 인증 진행3. 카카오 로그인 정보와 함께 `GET /auth/kakao/callback`으로 콜백 요청4. 콜백 요청에 대한 라우팅이 되어있으므로, 두번째로 카카오 로그인 전략 수행5. passport.use의 콜백 함수 실행, 로그인 검증 과정 진행6. 로그인 성공 / 실패에 따른 리다이렉트 와 같이 이해하였습니다. 그러나, 콘솔 로그 결과를 살펴봤을 때는 조금 다른 흐름으로 동작하는 것 같은 느낌을 받았습니다. 콘솔 로그를 바탕으로 로그인 과정을 생각해봤을 때는 1. `GET /auth/kakao` 요청2. 카카오 로그인 페이지로 리다이렉트, 로그인 및 인증 진행3. passport.use의 콜백 함수 실행. -> 카카오 프로필 콘솔 출력의 결과로 (2)와 같은 로그가 찍힘 -> profile.id 를 통해 유저가 존재하는지 조회 (findOne) -> 로그인 진행 -> serializeUser 호출4. `GET /auth/kakao/callback`으로 콜백 요청 -> (4) 의 결과를 통해 위 과정을 거친 뒤에 콜백 요청이 일어남을 알 수 있음5. 이미 로그인이 되어있으므로 deserializeUser 호출 -> (5)에서 유저 정보를 조회할 때 세션에 등록된 id로 유저를 조회함6. 로그인 성공 / 실패에 따른 리다이렉트 와 같은 흐름이어야 콘솔 로그 결과와 매칭이 되지 않을까하는 생각이 들었습니다. 결론적으로, 카카오 로그인 과정은 설명을 잘해주셔서 이해가 갔지만, 콘솔 로그의 결과에는 조금 의아한 부분이 있어 어떤 흐름으로 이해하고 넘어가면 될지 궁금하여 질문을 드렸습니다. 긴 글 읽어주셔서 감사합니다. 강의 영상 너무 잘 보고 있습니다. 감사합니다!!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
카카오 로그인 라우팅 관련 질문입니다.
// 1번 router.get('/kakao', passport.authenticate('kakao')); // 2번 router.get('/kakao/callback', passport.authenticate('kakao', { failureRedirect: '/', }), (req, res) => { res.redirect('/'); }); - 메인 페이지에서 카카오톡 버튼을 클릭하게 되면 `/auth/kakao` 로 GET 요청을 보내면서 카카오 로그인 전략을 수행하고, 처음에는 카카오 로그인 창으로 리다이렉트하여 카카오 아이디로 로그인 및 인증 절차를 거친 뒤 그 결과를 `/auth/kakao/callback` 으로 받아 콜백 라우터에서 다시 카카오 로그인 전략을 수행하는 것으로 이해했습니다. - 그렇다면, 애초에 카카오톡 버튼의 링크를 `auth/kakao/callback` 으로 달아놓아도 동일하게 동작하지 않을까? 하는 생각이 들어 직접 테스트 해본 결과 동일하게 동작함을 확인하였습니다. - 두 개의 라우터를 분리하여 작성하는 특별한 이유가 있는지 궁금합니다! 단순히 명목 상의 이유인 것인지 아니면 기능적인 차이가 있어 분리한 것인지 궁금합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
UV_THREADPOOL_SIZE=8 명령이 제대로 실행되지 않습니다.
선생님의 코드를 실행해보면서 따라하던 중 `UV_THREADPOOL_SIZE=8` 명령을 실행하면 8개의 코드가 한번에 실행된다 하셨는데 보시는 바와 같이 여전히 두번의 그룹으로 나뉘어져서 실행되고 있습니다. 어째서 이런 것인가요? 혹시 스레드가 4개 이하인게 아닐까 해서 갯수를 1개부터 6개까지 다양하게 시도해보았지만 여전희 4개씩 두 그룹으로 나뉘어져서 실행되었습니다. 태그에 달려있는 키워드들로 구글링 또한 해보았지만 해결을 못해서 이렇게 질문 드립니다. 참고로 사용하는 컴퓨터는 `맥북 프로 16 인치 기본형` 모델입니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
카카오 로그인 전략에서 res 사용하기
안녕하세요. 카카오 로그인 전략 알려주신대로는 해서 구현을 성공 했습니다. 근데 제 플젝에 맞게 조금 수정을 하고 싶은데 미들웨어 확장이 가능한지 질문 드립니다. module.exports = () => { passport.use( new KakaoStrategy( { clientID: process.env.KAKAO_ID, callbackURL: "/user/kakao/callback", }, async (accessToken, refreshToken, profile, done) => { try { const exUser = await User.findOne({ where: { snsId: profile.id, provider: "kakao" }, }); if (exUser) { done(null, exUser); } else { if( 로컬 회원가입과 연동이 안되어있으면 ){ //리다이렉트 시켜서 이메일과 닉네임 받아오기 //닉네임과 이메일 받기 // 여기서 이메일과 닉네임을 받는 폼으로 이동시켜 데이터 받은 후 다음 단계로 넘어가기 // res.redirect 를 쓰려했는데 res가 없어서 미들웨어 확장이 가능한지 질문드립니다. } const newUser = await User.create({ email : 로컬 이메일 kakaoEmail: profile._json && profile._json.kakao_account.email, nick : 로컬 닉네임 kakaoNick: profile.displayName, snsId: profile.id, provider: 'kakao', }); console.log("newUser 생성 완료!", newUser); done(null, newUser); } } catch (error) { console.error(error); done(error); } } ) );}; 제가 원하는 로그인 과정을 정리하자면 다음과 같습니다. 회원가입이 안된 상태의 유저가 1. 카카오 로그인하기 클릭 2. 카카오 이메일 비밀번호 입력 3. 로컬 이메일과 닉네임 없으면 그거 받는 폼으로 이동 4. 로컬 이메일 닉네임 입력 받고나면 카카오 로그인 전략(+ 로컬 이메일 닉네임 추가해서 db 생성) 그대로 진행
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
express.static 의 문제인지 html을 리턴하지 않습니다
안녕하세요 강의들으면서 직접 저만의 페이지를 조금씩 만들고 있는데 문제가 발생해서 여쭤보려고 글 남깁니다. 우선 아래가 메인js 이고, public 폴더에 index.html과 enroll.html 을 넣어두었습니다. const express = require('express'); const fs = require('fs'); const path = require('path'); const app = express(); const port = 3000; app.use(express.static(path.join(__dirname + '/public'))); app.get('/enroll', (req, res) => { let enrollpage = require('./public/enroll.html'); res.render(`${enrollpage}`); }) app.get('/', (req, res) => { let intro = require('./public/index.html'); res.render(`${intro}`); }) 이렇게 만들고 서버를 실행해보니 '/' 로 접속하면 index.html이 잘 나오는데 '/enroll' 로 접속하면 에러가 발생합니다. 1|index | <!DOCTYPE html> 1|index | ^ 1|index | SyntaxError: Unexpected token '<' 이런 에러가 발생하길래 enroll.html 파일 문제인가 싶었는데 그건 아니였습니다. express.static 과 관련된 문제일까요? 구글링을 해봐도 잘 안나오네요 ㅠㅠ 뭐가 문제인지 알려주시면 감사하겠습니다
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
passport session저장이 안되는 경우에 대해 질문입니다.
안녕하세요 강사님 passport를 활용해서 로그인을 시도하고 있습니다. 잘 작동되는 줄 알았지만 브라우저 쿠키에 sid를 저장시키지 못하고 있습니다. 위에 사진처럼 콘솔을 찍어보니 _id는 전달이 되는 듯 한데, 저장은 안됩니다. 밑에 사진 처럼 nodebird에서 log를 찍어보니 user형태가 조금 다르더라고요. 어떻게 해야 serializeUSer를 통해서 session에 user_id를 저장시킬지 도움을 주시면 감사하겠습니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
next(err) 로 next에 인자를 줬는데 바로 error처리 미들웨어로 안넘어갑니다ㅠㅠ
9강 실습하면서 page.js 라우터에 router.get('/test', (req, res) => { const err = new Error('고의로 만든 에러!'); next(err); }); 이렇게 미들웨어를 추가해놨습니다. localhost:8001/test 에 접속을 시도하면 바로 에러처리를 하고싶었어요 근데 이렇게 접속시도하니까 app.js 에 있는 404 처리 미들웨어(req,res,next)를 들렀다가, 에러처리 미들웨어(err,req,res,neext)로 넘어가는데 이유를 모르겠습니다 ㅠㅠ
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
static 파일을 특정 경로에만 적용시키려면 어떻게 해야할까요??
9강을 듣다가 express.static 에 경로를 적용해서 profile에만 main.css를 적용시켜보고 싶어졌는데 아래처럼 코드를 작성하니까 main.css를 못찾아서 404에러가 나네요.. 어떻게하면 좋을까요? app.use('/profile',express.static(path.join('../',__dirname, 'public')));