묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
windows에서 nodemon을 통한 app.js 실행 문제
안녕하세요 선생님windows 11 운영체제 플랫폼에서 강의를 수강하고 있습니다.webstorm IDE 사용하고 있습니다.nvm windows를 설치해서 사용 중이며 node 18 lts 버전을 사용 중에 있습니다.npm i nodemon --save-devpackage.json에 devDependencies에 추가한 상태입니다.선생님과 똑같이 cmd 창에서 node app 입력했을 경우 잘 실행이 되었는데요.nodemon app 을 입력했을 경우 다음과 같이 실행할 수 없습니다.C:\Users\mingyo\study\nodejs\nodePractice\express>nodemon app'nodemon'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.C:\Users\mingyo\study\nodejs\nodePractice\express>nodemon app.js'nodemon'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.찾아봤을 때는nodemon을 -g 옵션을 줘서 전역으로 설치하는 방법시스템 환경 변수를 수정(?)하는 방법이렇게 크게 두 가지 방법이 있는 것 같았습니다.global 설치는 선생님이 별로 추천하지 않는다고 하셔서 어떤 해결 방법을 사용하는 걸 추천하시는지 궁금합니다.아 그리고 nvm windows를 사용해서 node를 다운받았는데, nvm windows 사용으로 인해 이 문제가 발생한 건지도 궁금합니다.조금 찾아보긴 했는데 이렇게 질문드리는 게 적절한지 잘 모르겠습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
puppeteer 라이브러리 사용 중에 질문 드립니다.
퍼펫티어 쪽 코드인데 미니프로젝트에서 요구한 30개 이상을 크롤링 하는 부분을 완성을 해서 추가적으로 전체 메뉴를 긁어오고 싶어서 위와 같이 코드를 추가했습니다.12번째 코드부터 15번째 코드까지가 총 데이터 길이를 구하는 코드인데해당 코드에서 console.log(cnt);콘솔로 cnt를 출력해보면위와 같이 숫자 10까지 밖에 출력이 안되어서 질문 드립니다. 퍼펫티어 docs에서도이렇게 설명이 되어있어서 해당 코드라면 스타벅스 내에 있는 모든 전체상품 이미지가 크롤링 되어야 될 거 같은데스타벅스 홈페이지에서 카피를 하면 nth-child 의 값은 10까지 밖에 찍히지 않고전체 메뉴가 크롤링 되는 것이 아닌 도중에 제주 말차 메뉴까지 밖에 크롤링이 되지 않는 것이 의문이라 질문 드립니다. 혹시 해당 코드에 문제가 무엇인지 조언을 부탁 드리고 싶습니다 ㅠㅠ 전체 코드는 아래와 같습니다.import puppeteer from "puppeteer"; import mongoose from "mongoose"; import { starbucks } from "../model/starbucksSchema.js"; export async function startCrawling() { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); await page.setViewport({ width: 1920, height: 1080 }); await page.goto("https://www.starbucks.co.kr/menu/drink_list.do"); await page.waitForTimeout(2400); const cnt = await page.$$eval( `#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd `, (data) => data.length ); console.log(cnt); for (let i = 1; i <= cnt; i++) { const second_cnt = await page.$$eval( `#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(${i}) > ul > li`, (data) => data.length ); for (let j = 1; j <= second_cnt; j++) { const image = await page.$eval( `#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(${i}) > ul > li:nth-child(${j}) > dl > dt > a > img`, (el) => el.src ); const name = await page.$eval( `#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(${i}) > ul > li:nth-child(${j}) > dl > dd`, (el) => el.textContent ); console.log(`이름: ${name}, 이미지: ${image}`); const starbucks_db = await starbucks.updateOne( { name: name }, { img: image }, { upsert: true } ); } } await browser.close(); } startCrawling();
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
context.Provider에 관해서 질문 드립니다.
중첩으로 관리하는 이유에서 살짝 뇌정지가 와서 제가 이해한게 맞는지 여쭙니다.만약 value에 다 전달하게 되면 DiaryEditer와 DiaryList가 동시에 리렌더링 되지만바꾸면 data는 editor에 영향을 안주니까 editor와 List가 따로 리렌더링 일어나게 일어나게 된다는 말인가추가적으로 궁금한건 DiaryStateContext value에 다 넣으면 최적화가 풀린다고 했는데 DiaryItem은 memo를 하고 export 해서 모든 Item이 다시 리렌더링 되는걸 막았잖아요. 근데 그 최적화 마저 풀려버리나요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
graphQL 에러 문제
안녕하세요. 그래프큐엘 관련 에러가 해결이 되지 않아 질문드립니다.아래와 같은 Member, Dibs 엔티티가 있습니다.@Entity() @ObjectType() export class Dibs { @ManyToOne(() => Member, { primary: true }) @Field(() => Member) member: Member; @ManyToOne(() => Campground, { primary: true }) @Field(() => Campground) campground: Campground; @DeleteDateColumn() deletedAt: Date; }@Entity() @ObjectType() // @InputType() export class Member { @PrimaryColumn() @Field(() => String) memberId: string; @Column({ nullable: false }) @Field(() => String) password: string; @Column({ nullable: false }) @Field(() => String) nickname: string; @Column({ nullable: false }) @Field(() => String) email: string; @Column({ nullable: false }) @Field(() => String) name: string; @Column({ nullable: false }) @Field(() => String) phoneNumber: string; }그런데 Member 클래스를 다른 엔티티 클래스에서 외래키로 지정해주면 오류가 발생합니다.코드를 보시면 Dibs 엔티티에서 Member를 @Field(() => Member) 데코레이터로 지정하여 그래프큐엘 필드로 지정해주는데 아래의 오류가 발생합니다.Error: Cannot determine a GraphQL input type ("Member") for the "member". Make sure your class is decorated with an appropriate decorator.인터넷에 찾아보니 Member 클래스에 InputType 데코레이터를 지정해주라고 돼있는데 강의 예제코드에선 특정 클래스를 다른 엔티티에서 외래키로 활용할 때 그 클래스에 ObjectType만 지정하고 InputType은 지정해주지 않아도 잘 작동하였습니다.Member클래스 뿐만 아니라 외래키로 활용되는 모든 클래스에서 오류가 발생하고 있습니다. 해당 클래스들에 InputType을 지정하면 오류가 사라지긴 하나 아래와 같은 다른 오류가 또 발생합니다.Error: Schema must contain uniquely named types but contains multiple types named "Member". 이틀 동안 여러가지 찾아보고 해결을 시도해봤지만 잘 안되네요. 도움 부탁드립니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
우분투에서 빌드 시 오류가 생깁니다..
back과 front 둘다 우분투 서버 연결 해놓고,node -v / npm -v 해서 버전 확인도 했습니다.기본 node는 버전이 19이고 우분투에 설치한건 14버전입니다.front에서 빌드 하려는데npm ERR! missing script: buildnpm ERR! A complete log of this run can be found in:npm ERR!/home/ubuntu/.pm/_logs/2023-05-19714_54_17_6527-debug. log이런 오류의 원인은 뭘까요.. ㅠㅠ몇시간동안 방법을 찾지못해서 글남깁니다 ㅠㅠ제 깃허브 주소도 남깁니다..+레파지토리는 미리 생성해둔거라서 그냥 여기있는 git init을 하지 않고, 주소를 그대로 사용하여 clone 했는데도 이것도 문제가 될까요?https://github.com/nuring9/next.js-redux-saga-SSR-nodebird.git
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
객체를 저장하는 경우도 있나요?
안녕하세요. 혹시 디비에 객체를 저장하는 경우도 있나요? 예를들어 아래처럼 5개의 색상 키와 그 키에 해당하는 string을 값으로 가지는 객체 형태를 유저 정보에 저장하고 싶어요.// Color 객체 예시 입니다. { RED: string; BLUE: string; GREEN: string; YELLOW: string; PURPLE: string; }nest&typeorm는 처음이다보니 chatgpt의 도움을 많이 받고 있는데요. 객체는 저장이 되지 않지만 postgresql 에서는 이런 방법을 알려주긴하더라고요. export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() email: string; // 생략... @Column({ type: 'jsonb', nullable: true }) categories: { [key in Color]: string } | null; // 생략... 이 5개에서 늘어나거나 줄어들일이 없어서 테이블을 만드는게 맞는지 고민이 돼서요. 위와 같이하는건 좀 이상한 방법일까요? 이럴거면 그냥 email:string 하듯이 RED:string 이런식으로 컬럼 5개로 저장하는 방법이 나을까요?
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
18버전 업데이트 강의는 언제 업로드되나요?
리액트 16버전이라 강의 듣는데 헷갈립니다.... 최신 버전 이미지를 추가 해주시긴 하였으나, 기본 설명 자체가 16버전이라 혼란스럽고 불편합니다.당연히 최신 버전 강의인줄 알고 구매 하였는데, 이전 버전이 베이스로 된 강의면 제가 이 돈을 들여서 강의를 구매할 이유가 없다고 생각합니다.강의 업데이트 되는거 맞나요? 언제 업로드 되는건가요?
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
setData(() => [newItem, ...data])에 관한 질문입니다.
함수형 업데이트? 에서 setData(() => [newItem, ...data])를 하면변수 data 값이 setData()안에 들어있는 콜백함수가 들어가는 것인가요? 아니면 콜백함수가 실행된 값이 들어가는 것인가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
backend폴더 복사 후, dist폴더의 위치
안녕하세요.21-03 폴더를, 23-01/backend 폴더 내에 복사하였습니다.빌드 후, dist 폴더가 backend/backend/dist 에 위치합니다. 수업화면에서 처럼 backend/dist에 위치하게 하려면 어떻게 해야하나요?답변해주시면 감사하겠습니다~
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
로그인을하면 'Missing credentials' 이 뜹니다
회원가입을 끝내고 똑같이 이메일과 비밀번호 입력하고 로그인을 하면 401에러가 뜹니다.그래서 routes/user.js에서 info값을 콘솔로 보니 이렇게 info값이 들어오더라구요제 코드는 이렇습니다.< local.js ><routes/user.js><passport/index.js>에러를 인터넷에 서칭해보니까 local.js 안에new LocalStrategy 안에 usernameField와 passwordField를 제대로 값이 바인딩 됐는지 여부를 보라고 되어있는데 틀린게 없어보입니다...어떤걸 잘못한걸까요 ㅠㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
OG 실습 중에 궁금한게 생겨 질문드립니다.
불과 얼마전에 네이버가 사이트를 바꿨는데요오늘 OG 실습을 하던 중, 네이버 head / meta에 OG tag가 사라진 것을 확인했습니다.OG tag가 없이도 미리보기가 잘 구현되는데, 어떻게 가능한지가 궁금해 질문드립니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
마지막 수업 중 TypeScript로 전환하는 과정에서 LocalStrategy를 수정하던 중 발생한 오류입니다.
안녕하세요.수업 너무 잘 듣고 있던 학생입니다. 다름이 아닌 수업에서는 수정하지 않았지만 다음과 같은 오류가 발생하였고, 오류내용은 다음과 같습니다.-> 해당 코드는 controllers > auth.ts파일 중 login메서드의 구현부입니다.$ npx tsc --noEmit controller/auth.ts:27:37 - error TS7006: Parameter 'authError' implicitly has an 'any' type. 27 passport.authenticate('local', (authError, user, info) => { ~~~~~~~~~ controller/auth.ts:27:48 - error TS7006: Parameter 'user' implicitly has an 'any' type. 27 passport.authenticate('local', (authError, user, info) => { ~~~~ controller/auth.ts:27:54 - error TS7006: Parameter 'info' implicitly has an 'any' type. 27 passport.authenticate('local', (authError, user, info) => { ~~~~ Found 3 errors in the same file, starting at: controller/auth.ts:27그래서 해당 파라미터를 any로 타입을 줘서 해결하였지만, any를 가급적 사용하고 싶지 않아 다른 방법을 찾고 있는데 괜찮은 방법이 있을까요? 시도했던 방법은 다음과 같습니다.콜백함수를 별도의 함수로 빼내어 타입을 지정해준 방법 (passport모듈의 AuthenticateCallback타입)-> 하지만 message에서 다음과 같은 오류를 받음.controller/auth.ts:33:55 - error TS2339: Property 'message' does not exist on type 'string | object | (string | undefined)[]'. Property 'message' does not exist on type 'string'. 33 return res.redirect(`/?loginError=${info?.message}`);-> message as string으로 해결해보려 하였지만 같은 오류메세지를 반복.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
04-06 Mongoose 활용 강좌 21분 경에 포트포워딩 주석을 해제하고 진행했는데
저는 주석 안풀고 그냥 네임 리졸루션으로 했는데 그렇게 진행해도 되나요? 그런데 이렇게 하면 compass 프로그램 주소를mongodb://my-database:27017/mydocker 이렇게 가야하는 건가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker-compse volumes 관련 질문드립니다!
docker-compose.yaml에 volumes 추가한 후 실행해봤지만 index를 바꿔도 refresh되지 않습니다.그래서 반대로 container의 값을 수정하면 local의 index.js가 바뀔까 했지만 위의 사진처럼 오류가 발생합니다. Mount되었다는 것으로 보아 연결은 된 것 같고, 제공된 파일과 강의 비교하면서 오탈자 찾아봤지만 모두 같습니다.이를 해결하기 위해 어떻게 접근해야할지 궁금합니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
몽고디비 몽구스와 socket.io를 활용한 실시간 채팅 페이지
안녕하세요.현재 프로젝트 시작했는데 백엔드 배정받아 급하게 강의 결제후 듣고 있습니다.인스타그램 같은 어플을 만들 예정인데, 저는 채팅쪽 파트를 맡게 되었습니다.리액트, node.js mongodb, mongoose를 사용하기로 했으며 제가 구현해야 하는 기능은 이렇습니다.아이디를 검색했을 때 나오는 유저와 채팅하기 버튼을 누르면, 그 유저와 1대1 채팅이 가능하도록 해야합니다. 그리고 채팅 후 방을 둘 다 나가기 하지 않는 이상 채팅방은 계속 유지되어 계속 채팅을 이어나갈 수 있어야 합니다.스키마작성부터 CRUD 코드 작성, 서비스코드 작성, 라우터 코드 작성까지,, 손도 못대겠네요 ㅎㅎ아무리 머리를 쥐어 짜내봐도, 어떻게 구현해야할지 감조차 안잡혀서 유튜브 검색해보면 외국인 강좌들 밖에 안나와서,, 어떻게 해야할까요ㅎㅎfigma는 위와 같습니다.프론트만 해보다 보니 뭘 어떻게 해야할지 모르겠어요,,,ㅠㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
싸이월드 만들기 1탄에서 height 값 관련 질문입니다.
안녕하세요 혼자 실습중에 궁금한 점이 생겨서 질문드립니다. 수업시간에 싸이월드 1탄 했던 것을 복습하는 중인데요. 의문이 생긴 점이 있습니다. 수업의 약 18분 30초 경에 .wrapper__left 의 height 값에 대해서 472px이라고 언급하셔서 수업들을 때는 그냥 그런가보다 하고 따라했었습니다. 그런데 복습하기 위해서 피그마로 보면서 하고 있는데 아무리 생각해도 이게 왜 472px이 나오는지 의문이 들더라구요. wrapper__left 값을 봐도 484내지는 496이 아닌가 싶은데.. 지엽적인 질문을 드려서 죄송합니다만 어떠한 원리로 이게 472px인지 알 수 있을까요? 아무리 피그마 내에서 확인을 해도 472px이 나오는 이유를 모르겠습니다.. 읽어주셔서 감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
백틱안에 css
백틱안에 css속성적용할때자동완성하는 방법 뭔가요??저는 이렇게 주황색으로만 뜨네요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
restoreAccessToken Mutation 관련 질문
https://backend-practice.codebootcamp.co.kr/graphqlURL에 직접 접속하여 로그인 mutation 쿼리를 직접 실행하며 테스트 하고 싶어서 진행 중인데요,restoreAccessToken 쿼리에 대한 의문이 생겼습니다.제가 잘못 사용한건지 작동이 되질 않아서 몇 시간 동안 삽질하다가 문의드립니다.제가 알기로 restoreAccessToken 쿼리는accessToken이 만료된 경우 refreshToken을 통해 accessToken을 새로 발급해주는 것으로 알고 있습니다.그래서 우선은 테스트로 로그인 쿼리를 날려서 만료되지 않은 accessToken을 받고 복사한 뒤,위와 같이 쿼리를 작성하고,{ "authorization": "Bearer [accessToken값]"}이러한 방식으로 헤더에 직접 입력 후 request를 날렸습니다.그런데 아래와 같은 에러 문구가 뜹니다.토큰이 제공되어야 한다는 에러 메시지에 제가 뭔가 설정을 잘못했나? 싶어서 accessToken을 필요로 하는 fetchUserLoggedIn 쿼리에 요청을 날려보니 잘 작동합니다.하지만 restoreAccessToken은 똑같이 헤더 설정을 하고 요청을 보내도 jwt must be provided 와 같은 메시지만 계속 나옵니다.그리고 다음으로 만료된 토큰을 넣어봤습니다.loginUserExample 쿼리를 통해 만료된 토큰을 만들고 넣어서 요청을 보내니까 Context creation failed: 토큰 만료 와 같은 메시지가 나옵니다. restoreAccessToken 이건 어떻게 사용하는 쿼리인가요?제가 잘못 사용하고 있는 걸까요..?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
fetchUseditemsIPicked 검색 시 오류발생입니다.
안녕하세요.fetchUseditemsIPicked 의 search 공백인 상태로는 정상 조회가 되는데 값을 넣으면 아래와 같은 에러가 발생합니다.에러 원인과 해결방법 부탁드립니다!감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
노션에 있는 퀴즈 섹션 문의드립니다!!
안녕하세요. 강의를 들으며 신세계를 느끼는 중인 학생입니다.다름이 아니고 혹시 퀴즈섹션 보면 마지막에 만들 수 있게 피그마제시해주는걸로 아는데, 혹시 답지라면 좀 이상하긴 하지만, 코드를 볼 수 있는 그런 자료들은 따로 없나요? 깃헙이나 등등...