수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
crud 관련 질문 드립니다.
제가 간단하게 데이터베이스를 참조해서 유저를 생성, 조회, 수정, 삭제 (대략 crud)를 간단하게끔 할 수 있는 서버를 만들었습니다. 그런데 기능을 구현하는데 있어 문제가 되는점을 질문드리고자 합니다. 1. get메서드와 await User.findAll()을 사용해서 유저를 조회하는 라우터를 사용하려합니다. 만약 유저가 없을 때, 다음 코드는 []를 출력합니다. const provided = await User.findAll(); console.log(provided) // [] 그래서 유저가 없을 때 (테이블이 비어있을때)는 저런 결과를 출력하는구나 해서 조건문을 다음과 같이 구성했습니다. if (provided === []) { res.send("현재 유저가 없습니다."); } 그런데 조건문에 조건이 성사되지 않아 다음 로직으로 넘어가게 됩니다. 조건문의 식을 어떤식으로 구성해야지 조건문에 걸리게 될까요? 2. patch메서드와 await User.update()를 사용해서 유저의 정보를 편집하는 라우터를 사용하려합니다. 다음과 같은 코드가 사용됩니다. const modified = await User.update( { name, age, married, comment, }, { where: { name: params }, } ); 여기 까지는 문제가 없습니다. 데이터베이스를 확인해보면 데이터가 존재합니다. 한가지 아쉬운건 어떤점이 변경되었는지 보여주고싶은데 제가 구성한 html에 다음과 같이 출력됩니다. 유저가 변경되었습니다! [1] 제 생각에는 update 함수안에 로직의 문제 처럼 보여집니다. 로직을 어떻게 수정하면 좋을까요? 3. 유저의 정보를 수정하거나 삭제할 때 "/user~~/:who" 처럼 사용한 후 req.params.who로 유저의 이름을 받아내는 식으로 사용합니다. 한 가지 아쉬운 건 만약 유저의 이름이 영어가 아닌 한글이라면 who에 한글을 넣었을 때 제대로 동작하지 않는다는겁니다. 제 이름으로 유저를 만들고 삭제하기 위해 await User.destory가 포함된 라우터에 제 이름을 넣고 delete요청을 다음과 같이 보냈습니다. 포스트맨을 이용하였습니다. DELETE /userRemove/이 존재하지 않습니다. 404 Error: DELETE /userRemove/이 존재하지 않습니다. at D:\Coding\JS\Node\Node.js_Bible\sql-test\app.js:44:19 at Layer.handle [as handle_request] (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:323:13) at D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:284:7 at Function.process_params (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:341:12) at next (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:275:10) at D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:641:15 at next (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:260:14) at Function.handle (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:174:3) at router (D:\Coding\JS\Node\Node.js_Bible\sql-test\node_modules\express\lib\router\index.js:47:12) 404처리 미들웨어에서 출력되었습니다. 마치 라우터가 없다는 듯이 출력이 됩니다. 한글이 들어가서 encodeURIComponent를 고려해보긴했는데 라우트 매개변수에 encodeURIComponent를 어떤 식으로 적용해야 할지 모르겠더군요. 만약 아래와 같이 사용한다면 에러가 발생합니다. app.get(`/Hello/:${encodeURIComponent(id)}`, (req, res) => { res.send(`Hello ${req.params.id}`); }); ReferenceError: id is not defined
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
프로세스와 cpu관련 질문드립니다.
1. 마스터프로세스는 코어 하나를 점유하지 않나요? 강의에서 제로초님 컴퓨터는 cpu가 6개(코어를 의미하신 거겠죠?)라고 하셨습니다. 그리고 cluster.js를 실행했을 때 process.pid가 7개가 출력됩니다. (마스터 프로세스 하나 워커 프로세스 6개) 이때 마스터 프로세스는 어느 코어에서 실행 되는건가요? 2. 클러스터와 child_process 차이가 뭔가요? 둘다 멀티 프로세스이지만 child_process는 메인 프로세스에서 다른 프로그램을 실행 시킬 수 있는 제어권을 주는 개념이고 클러스터는 효율을 위해 메인에서 워커에게 일을 분배해준다고 이해했습니다. 여기서 cluster.js의 else부분을 다른 파일로 만들고 부모 프로그램에서 child_process로 else부분 파일을 실행시킨다면, 부모 프로세스에서 listen하므로 포트를 공유하고 데이터를 넘겨주며 멀티프로세스를 사용할 수 있는데 이런 식으로 child_process를 이용해 클러스터를 구현한다면 클러스터와 어떤 차이가 있는건가요?
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
fs.readFile 호출시 readFile 도 background 로 보내는 건가요?
const fs = require('fs') fs.readFile('/Users/joe/test.txt', 'utf8' , (err, data) => { if (err) { console.error(err) return } console.log(data) }) 관련 질문을 읽다가 readFile 도 background 로 간다는 뉘앙스가 느껴져서 질문해봅니다. readFile 함수 자체는 background 로 가진 않지만 파일 읽는 행위가 background 에서 진행되는 걸까요?
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
POST 메서드로 값을 넣어주고 몽구스 .create() 쿼리를 사용하면 컴퍼스에 __v 속성이 생성됩니다.
제가 개인적으로 쇼핑몰 비슷한 프로젝트를 진행중인데 상품 데이터를 추가해주기 위해서 post로 받을 수 있게 라우터를 뚫어놓고 req.body에 있는 데이터 들을 .create()를 사용해서 데이터를 추가할 수 있게 해주었습니다. router.post("/", async (req, res, next) => { const { name, price, origin, type } = req.body; try { const products = await Product.create({ name, price, origin, type, }); res.send("값을 잘 받았습니다!"); } catch (err) { console.error(err); next(err); res.send("값을 받지 못하였습니다."); } }); 상품데이터를 post로 받는것과 저의 mongodb 데이터베이스에 데이터를 넣는거 까지는 잘 됩니다. 그런데 컴퍼스를 확인해보니 제가 컴퍼스로 직접 넣은데이터와 post로 넣은 데이터가 차이가 존재합니다. 농구공은 제가 컴퍼스로 넣었고 덤밸은 post로 넣었습니다. 덤밸 데이터에 __V 속성이 0으로 존재합니다. 제가 postman프로그램으로 post요청을 보내었는데 json형식으로 다음과 같이 보냈습니다. { "name": "덤밸", "price": 25000, "origin": "대만", "type": "운동용품" } __V가 생기는 원인과 post메서드로 보내었을때 저 속성이 안생기게 할수 있을까요? 추가적으로 sql을 사용 할 때는 모델을 생성 할 때 테이블 옵션을 사용해서 createdAt을 생성 할 수 있게끔 할 수있었는데 mongodb를 사용할 때에도 비슷한 방법으로 할 수 있나요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
Promise과 콜백함수에 관한 질문입니다.
Promise나 Async 경우, Promise 객체를 return 하는데, 콜백함수로만 디자인하면, promise 객체를 return 하지 않네요... 그래서, 몇 가지 궁금증이 발생했는데요. Q1. Promise가 아니라 콜백을 쓰는 게 더 좋거나, 반드시 콜백 함수로만 디자인해야하는 경우가 있나요?? Q2. 코딩을 하다보면, 반드시 Promise 객체만 요구하는 경우가 있나요?? 다시 말해서, 단순히 콜백 지옥 때문이 아니라, 콜백 함수만으로 비동기를 디자인 할 수없는 경우가 있는지 궁금합니다.
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
req.login()에서 loginError는 어떤 에러인가요?
어제 드렸던 질문에서 연장선이 되는 질문이네요. req.login이 실행될때 passport.serializeUser로 넘어가게 될 때 passport.serializeUser 내부에서의 done()은 null과 user.id를 인수로 갖게 되고 user.id를 세션에 저장된다고 하셨습니다. 그러면 다시 req.login을 이어서 실행을 하겠죠? req.login에서 콜백함수로 loginError를 인자로 넘겨주게 되는데요. 이미 에러에 대해서는 위쪽 코드에서 비밀번호가 틀렸다던가 회원이 아니라던가 등에 로그인에 실패할수 있는 요인들에 대해 에러를 처리해줬는데 여기서 또 loginError를 처리한다는건 어떤 에러인가요? passport.serializeUser 내부에서의 done()에서 세션을 저장하지 못했을 때에 에러인가요? 추가적으로 exUser 변수가 existUser인가요?
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
passport.serializeUser에 대해서 질문드립니다.
serializeUser함수가 로그인을 수행 할 시 세션에 어떤 데이터를 저장할지 정해주는 메서드라고 하였습니다. 그런데 이 동작을 done(null, user.id)가 수행해주는 것인가요? done(매개변수, 매개변수)은 passport.authenticate 혹은 req.login의 리턴주소 가는것이 아닌가요?? 그리고 로그인 라우터에 (req, res, next)를 붙이는게 기존의 미들웨어를 확장하는 형식이라고 하셨는데 혹시 done()의 실행방식과 관련이 있는건가요? 질문을 요약하면, 1. passport.serializeUser에서 세션의 데이터를 저장하는 방식이 궁금합니다. 2. 로그인라우터에 (req, res, next)가 붙는게 done과 관련이 있는지 궁금합니다. 3. done()이 호출된 지점으로 돌아가는 리턴과 역할이 같은지 궁금합니다. 4 . res.redirect(매개변수)에서 매개변수로 url이 들어가면 그 주소로 이동 되는건 알겠는데 이 메서드가 어떻게 쿠키까지 브라우저로 보내는지 궁금합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
axios.delete할때 socket hang up 에러가 뜹니다.
무엇이 원인인가요? 스택에서도 뚜렷한 답을 얻을수가 없네요;
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
세션 질문드립니다.
로그인 처리를 한뒤에 세션을 확인해보면 passport : { user: 1 } 이런식으로 들어가있는데 , socket에서 세션을 확인해보면 해당부분이 없습니다. 왜그럴까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
http referer에 대한 이해
찾아보니까 자신 페이지에 요청한 이전 페이지 주소, 로그수집 접근제어 사용 이 라고 하던데,그냥 단순하게 http 헤더에 저장되어있는 요청한 클라이언트의 uri 전체 정보를 일컫는 거라고 보면 되죠?프로토콜+호스트+포트+경로+쿼리스트링 같이 uri 전체 스트링
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
spawn python EACCES
이건 무슨 에러인가요? 구글링해보니 eacces는 경로 관련 에러라고 하던데..
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
CORS 에러 질문
프론트엔드는 localhost:3000 에서 next.js 로, 백엔드는 localhost:4000 에서 node.js 로 만들고 있습니다. 쿠키를 다루기 위해서 'Access-Control-Allow-Credentials' 를 true로 만들고 싶어서 cors 미들웨어에 credential: true 를 옵션으로 주었습니다. 그런데 이렇게 해봐도 'Access-Control-Allow-Credentials' 가 true 로 되지 않습니다. 구글에 검색해봐도 cors 옵션으로 credential: true 를 하면 된다고 하는데 아무리해도 되지 않습니다... 뭐가 문제일까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
io.use 질문드립니다.
io.use를 통해 세션과 쿠키를 미들웨어 확장하여 연결해주었는데요, 클라이언트 측에서 접속하니 connetion 부분이 두번이 실행이 됩니다. 왜그럴까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
몽고디비 연결 에러
안녕하세요, npm start를 눌러 실행하면 다음과 같은 오류가 뜹니다. 현재 mongo db 5.0.5버전을 사용하고 있습니다. 그 외 모듈의 버전은 실습과 동일하게 설정하였습니다. mongod --auth를 실행한 후 , mongo admin -u root -p 비밀번호를 입력한 후에 제대로 접속이 된 것을 확인하고 npm start를 하였습니다. 인터넷에서 오류를 검색하여 해결하고자 하였으나 해결하지 못하여 글을 올리게 되었습니다.ㅠㅠ 어떻게 해결하면 좋을지 알려주시면 감사하겠습니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
현업 관계쿼리 몽구스 vs 몽고디비
몽고 디비 자체에도 reference로 관계를 맺을수 있는데,보통 현업에선 어떤게 자주 쓰이나요?1. 몽고디비 다큐먼트 자체에서 미리 ref로 관계 맺어놓고 데이터 가져옴2. 몽구스 populate에 의존해서 동적으로 embed시키고 가져옴
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
몽고디비 메소드 create/insert
저 2개는 단어만 다르지 다큐먼트가 없으면 생성해주고 데이터를 넣어주는 역할을 한다고 보면 되나요?
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
parseAggregate: expected colon after dict key 에러에 대해 아시나요??
자바스크립트(node.js)안에서 변수를 만들고 만든 변수를 넌적스를 활용해 html 내부에서 사용하려했습니다. res.render()로 html 파일과 변수를 연결해주었습니다. 그리고 html에서는 평범하게 변수를 <p>태그안에 넣고 {{}}로 감싸두었습니다. 여기까지는 프로젝트를 실행했을 때 변수가 성공적으로 적용된 것이 확인이 됩니다. 그런데 {{}}로 감싸여진 변수를 반복문으로써 사용하기 위해 다음과 같은 문법을 썼습니다. {% for item in {{productNames}} %} 이런 문법이 들어갈 때 parseAggregate: expected colon after dict key에러가 표출되더라구요. {{productNames}}를 넌적스 변수 문법을 따르려 해도 에러가 똑같이 발생합니다. {% set names = {{productNames}}%} 왠만해서는 구글링으로 최대한 검색한 후 질문을 드리려했었는데 실제 구글에 'parseAggregate: expected colon after dict key' 를검색해도 페이지가 2개밖에 안나옵니다. 조현영님께서는 이 오류에 대해 거치신게 있을까봐 이 오류에 대해서 여쭤봅니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
nodebird에 채팅방을 입혀주려고 하는데
게시글은 mysql, 채팅방은 mongo로 따로따로 DB관리하는 식으로도 가능한거죠?코드는 그냥 시퀄이랑 몽구스 같이 연결만 해주면 되고요.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
req.connection.remoteAddress가 deprecated 되었습니다
다른 ip파악 코드좀 소개해 주실 수 있으신가요?전 시간에서 소개한 req.ip 쓰면 되려나요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
서버를 사용하는 언어로 노드에 대한 질문
강의 잘 보고 있습니다 :) 강의에 대한 질문이라기 보다는 실 서비스를 만들려고하는데 인프런처럼 영상들(강의)을 보거나 게시판기능(스터디 모집이나 질문등)같은 강의 사이트를 만들때는 노드가 적합할까요? 프로세스 하나하나가 복잡할때는 노드보다는 다른언어를 사용하는것이 좋다고 하셨는데, 그 프로세스 하나의 복잡도가 어느정도를 기준으로 잡는게 좋을까요? 감사합니다 !