수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
app.js를 server.js로 분리한 이유
만일 그대로 app.js에서 서버를 실행해버리면, 요청이 올때마다 app.js로 와 온갖 미들웨어를 실행하기 때문에, listen만 하기 위해서 나눠 논 것인가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
jesf.fn() 과 jest.mock() 차이점
jest.fn() : 개별적으로 하나하나씩 모킹 함수 해줄때 사용. User 객체는 안에 많은 메소드들을 내포하고 있다.만일 jest.fn()을 통해 모킹화 하면 User.fineOne = jest.fn(); User.findOrCreate = jest.fn(); 이런식으로 하나하나 일일히 지정해야 한다. 따라서, jest.mock("..."); const User = require("..."); 이렇게 User 객체에 있는 모든 엘리먼트를 그룹 모킹화 하기위해 사용하기 위해 jest.mock()를 사용하는 것이다. (jest.mock는 사실 순서는 상관없음. import나 function같이 위로 자동으로 올라감)제가 이해한게 맞는지 검증 부탁드립니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
jset.fn(() => { ... }) 와 jest.fn().mockResolveValue() 차이
둘이 모킹 함수의 결과를 리턴값을 결정해주는것 같은데 차이가 뭔가요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
login시 email,password의 전달
안녕하세요! 회원가입 폼에서 버튼을 누르면 email,nick,password가 req.body에 담겨와 해당 email을 DB에서 조회해서 존재유무를 파악하여 계정을 DB에 생성하는 로직은 이해가 가는데 login시에 email과 password를 어떤식으로 전달받아 사용하는지 잘 모르겠습니다. passport를 사용해서 그냥 외워야하는건가요? localStrategy에서 async(email,password,done)=>{...}으로 email과 password를 가져오는데 여기서 이걸 어디서 가져오는건지를 잘 모르겠네요. html에서 넘겨준 req.body에서 email,password를 회원가입과 같이 사용해야한다고 생각하는데 그런 로직이 보이지 않아서요 ..! 감사합니다.
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
넌적스 관련 질문드립니다.
노드교과서에서 넌적스 모듈 관련 설정을 보면 코드가 이렇습니다. nunjucks.configure('views', { express: app, watch: true, }); 저는 위 처럼 코드 작성 후 실행시 실행하면 'template not found' 에러가 뜹니다. 그런데 'views'를 빼고 작성하면 res.render('html형식 파일')이 정상적으로 출력이 됩니다. 제 생각에는 nunjucks모듈의 버젼 차이로 판단이 되는데 교제에서 사용하신 nunjucks 버젼 좀 알수있을까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
model관계 설정 중 through을 통해 table이 안만들어집니다..
user 테이블의 관계 설정 중 follower,following 부분에서 중간 table인 follow가 생성이 안됩니다. 관계 설정도 빠짐없이 한 것 같은데 mysql 상에서도 table이 생성되지 않습니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
하나도 모르겠어요
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.하도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 하하 익스프레스로 웹개발할 때도 이렇게 어렵나요 장고는 이렇게 어렵진 않았는데
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
Refresh Token
현재 방식은 발급해준 토큰이 access + refresh 토큰 역할을 동시에 한다고 생각하면 되나요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
promise에서 궁금합니다.
router.post('/join', async (req, res, next) => { const { email, nick, password } = req.body; try { const exUser = await User.findOne({ where: { email } }); if (exUser) { return res.redirect('/join?error=exist'); } const hash = await bcrypt.hash(password, 12); await User.create({ email, nick, password: hash, }); return res.redirect('/'); } catch (error) { console.error(error); return next(error); } }); 여기서 User.create 앞에 await을 붙일 필요가 있을까여? 없어도 될거같아서 문의드립니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
백엔드에만 공부하고 싶은데
백엔드 공부에만 집중하고 싶은데, 위 실습예제 따라가는거에서 프론트쪽은 안다루고 그냥 코드만 가져와서 쓰는걸까요? 맞다면 실습 공부해보려고 하고 아니면 뛰어넘던가... 간단하게만 보려고 합니다! 프론트는 리액트 공부했어서 어느정도는 다룰줄 아는데, 굳이 템플릿 엔진을 공부할 필요는 없겠죠? 리액트로 된 프론트 코드가 있을까요? 있다면 어디서 참고 할 수 있을까요? 강의 정말 알차게 보고있고 그래서 다른분들에게도 소개 많이 하고 있습니다! 항상 양질의 강의를 제공해주셔서 감사합니다~~! 아그리고 책도 샀어요 ㅎㅎ
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
복습하고있습니다.
복습하고 있습니다. static associate(db) { db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' }); } static associate(db) { Comment.belongsTo(db.User,{ foreignkey:'commenter' , targetKey:'id' }); } 로 연결이 되었는데 const comments = await Comment.findAll({ include: { model: User, where: { id: req.params.id }, }, }); SELECT `Comment`.`id`, `Comment`.`comment`, `Comment`.`created_at`, `Comment`.`commenter`, `Comment`.`UserId`, `User`.`id` AS `User.id`, `User`.`name` AS `User.name`, `User`.`age` AS `User.age`, `User`.`married` AS `User.married`, `User`.`comment` AS `User.comment` FROM `comments` AS `Comment` INNER JOIN `users` AS `User` ON `Comment`.`UserId` = `User`.`id` AND `User`.`id` = '1'; comment.UserId로 가르키고 있는데 이게 commenter이 되야하는거 아닌가요? 이부분은 어디서 수정해야하는지 궁금합니다. 그리고 하나더 궁금한게 삭제나 이런것들 할때 임의로 날려서 남에 게시글 삭제하면 안되니 실무에서 매번 login id랑 글쓴 id랑 체크해서 확인하고 삭제처리되게 하나요? 아니면 더좋은 방법이 있나요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
axios withCredentials
axios도 withCredentials 옵션이 있던데 이건 설정 안하는 건가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
JWT_SECRET 질문있습니다.
구현을 보건데 대칭키 방식으로 ssl인증을 하는것인가요?
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
this 관련 문의드립니다.
node.js 교과서로 공부중에 궁금한것이 있습니다. 화살표 함수는 본인의 대한 this를 갖지 않는다는것인데요. 때문에 화살표 함수가 없던 시절에 메서드 내부에 콜백함수 안에서 this를 사용해 매서드 외부의 객체(friends)를 참조하기 위해서 매서드 내부에서 this값을 가지는 변수를 선언하고 콜백함수에서 그값으로 참조를 하였죠. const relationship1 = { name: "zero", friends: ["nero", "hero", "xero"], logFriends: function () { const that = this; // this는 relationship1을 가리킨다. this.friends.forEach(function () { console.log(that.name, that.friends); }); }, }; relationship1.logFriends(); 그리고 화살표 함수가 생긴 이후로는 이런코드를 작성하구요. const relationship2 = { name: "zero", friends: ["nero", "hero", "xero"], logFriends() { this.friends.forEach(() => { console.log(this.name, this.friends); }); }, }; relationship2.logFriends(); 그런데 궁금한것이 logFriends역시 함수인데 logFriends는 화살표 함수를 쓰지 않아도 this.friends로 메서드 외부에 friends에 접근 할 수 있다는 것이 신기하네요. 그래서 제가 함수 프로퍼티를 화살표함수로 만드는 시도를 했습니다. const relationship3 = { name: "zero", friends: ["nero", "hero", "xero"], logFriends: () => { console.log(this.friends); }, }; relationship3.logFriends(); 하지만 이렇게 하면 undefined가 출력되더군요. 두번째 코드의 logFriends가 함수 프로퍼티라 가능한건가요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
백엔드서버 질문드립니다
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 안녕하세요. 저는 조현영님의 강좌를 다듣고 이번에 한 작은 스타트업에서 Nodejs 백엔드 개발자로 일하게 되었습니다. 수업에서 공부한 내용으로 많은 일을 할 수 있게 일단 감사인사 드립니다 ^^ 제가 백엔드를 설계하면서 궁금한 점이 생겨서 질문드립니다 1. 수업에는 항상 로그인, multer및 사진처리, 게시물 등 여러 API 를 한 서버에 넣으시는데 실무에서도 이러시는 지 궁금합니다 2. 로그인 전문서버, multer 전문서버, 게시글 전문서버 등 이런식으로 서버마다 역할을 두어 따로두면 비효율 적인가요? 3. 1번과 2번이 각 장단점이 있다면 어떤것이고 어느서비스에 잘 맞을까요? 제가 처음 스타트업 실무에 투입되서 질문이 번거롭고 많은점 양해부탁드립니다 ㅠㅠ
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
7.6강 models/index.js의 대해서 궁금한 것이 있습니다.
제가 교제를 보고 공부하는데 궁금한것이 있습니다. 7.6강 models/index.js파일을 보시면 const config = require('../config/config')[env]; 이런 코드가 있던데 []가 배열에서 []안에 넣은 인덱스값을 참조하게 되는게 맞지 않나요? 그런데 제가 만든 프로젝트안에 ../config/config 을 살펴보면 env값은 없고 심지어 객체 데이터 타입이라 []로 참조할 수 있는게 맞나 싶습니다. 아니면 env를 참조할때는 저런 방식으로 사용하나요? 그리고 중요한점은 제가 이 코드를 프로젝트의 도입하려하는데 모종의 이유로 제 프로젝트에 ES2015방식을 사용하면서 모듈을 불러올때 const """ = require(""")이런 방식을 사용하지 못합니다. 따라서 const config = require('../config/config')[env]; 이런 방식으로 [env]를 붙일 수가 없습니다. 질문을 요약하자면, 1. ../config/config(.json) 파일에는 배열객체가 아닌 json파일인데 왜 []가 사용되는지 궁금합니다. 2. 보통 env접근할때는 dotenv모듈을 불러와서 사용하지 않나요? 3. [env]가 어떤식으로 동작되는지 궁금합니다. 4. [env]가 꼭필요한지 궁금합니다. 5. [env]가 필요하다면 ES2015를 사용할때 어떤식으로 작성되어야 할지 궁금합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문드립니다.
1 . 저장을 눌렀을 때 creatAte 시간이 엉뚱한 시간으로 들어가는데 어디서 확인 할 수 있을까요? 2. 이미지를 먼저 업로드 하는방식을 사용하면 추후에 만약 그냥 새로고침을 눌렀을 때 이미지 파일만 계속해서 쌓이는 현상이 발생하는데 용량만 차지하는거 아닌가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
addFollowings 함수에 대해서 질문이 생겨서 여쭤봅니다.
//여기가 user.test.js 입니다. jest.mock("../models/user"); const User = require("../models/user"); const { addFollowing } = require("../controllers/user"); describe("addFollowing", () => { const req = { user: { id: 1 }, params: { id: 2 }, }; const res = { send: jest.fn(), }; const next = jest.fn(); test("사용자를 찾아 팔로잉을 추가하고 success를 응답해야 함", async () => { User.findOne.mockReturnValue( Promise.resolve({ addFollowing(id) { return Promise.resolve(true); }, }) ); await addFollowing(req, res, next); expect(res.send).toBeCalledWith("success"); }); test("사용자를 못 찾으면 next(error)를 호출함", async () => { const error = "사용자 못 찾음"; User.findOne.mockReturnValue(Promise.reject(error)); await addFollowing(req, res, next); expect(next).toBeCalledWith(error); }); }); //여기서 부터가 user.js const User = require("../models/user"); exports.addFollowing = async (req, res, next) => { try { const user = await User.findOne({ where: { id: req.user.id } }); if (user) { await user.addFollowing(parseInt(req.params.id, 10)); res.send("success"); } else { res.status(404).send("no user"); } } catch (error) { console.error(error); next(error); } }; 계속 같은 코드에서 같은 오류가 나서 혹시나 하는 마음에 github에 있는 것들을 복사해서 가져와서 테스트를 했는데도 Test suite failed to run Call retries were exceeded at ChildProcessWorker.initialize (node_modules/jest-worker/build/workers/ChildProcessWorker.js:193:21) 라는 내용만 나오고 추가적인 에러 메세지는 없는 걸 보니 버전 문제 같은데 혹시 버전 문제가 아니라면 다른 문제가 있는 걸까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
sub schema 업데이트 방법 질문합니다.
const permissionSchema = new Schema({ page: { type: String }, permitted_users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User", }], }); const appSchema = new Schema({ name: { type: string }, permissions: [permissionSchema], }); const userSchema = new Schema({ email: { type: string }, name: { type: string }, }); 안녕하세요. 위의 스키마는 대략적인 필드만 나타낸 예시입니다. 여기서 파라미터(app_id, permission_id, user_id)를 클라이언트에서 받아서 permitted_users에 받은 user_id를 추가해주는 작업을 해주고 있습니다. (DB에 저장도 잘 됩니다.) 현재 controller와 service가 분리되어 있어서 controller에서 서비스로 addPermittedUser를 호출하면 업데이트된 결과를 받고 싶은데 어떻게 받아야할지 잘 모르겠습니다... async와 await을 사용해서 return 도 해보았는데, MongooseError: Query was already executed 오류가 계속 발생해서 해결을 하지 못하고 있습니다... // permissionService - addPermittedUser exports.addPermittedUser = async (options) => { const {app_id, permission_id, user_id } = options; App.findById(app_id, (error, app) => { if (error) { console.log(error); } app.permissions.id(permission_id).permitted_users.push(user_id); app.save(); }); }; 접근 방향을 알려주실 수 있을까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
ES6 중복 제거 코드 (참고)
const a = [...new Set(array)]