묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결테스트주도개발(TDD)로 만드는 NodeJS API 서버
curl -X 매개변수를 찾을 수 없습니다
윈도우 11에서 강의를 수강중입니다.Hello World를 찍기위해 curl -X GET 'localhost:3000'을 하면 아래와 같이 뜹니다. cs의 터미널, 파워쉘에서 했을 때 똑같이 이렇게 뜨고 크롬에서 localhost:3000으로 했을 때 Hello World가 찍히는걸 보면 실행은 제대로 되었는데 왜 이렇게 뜰까요? 구글링 해도 잘 나오지 않아 질문합니다. curl -X GET 'localhost:3000' Invoke-WebRequest : 매개 변수 이름 'X'과(와) 일치하는 매개 변수를 찾을 수 없습니다. 위치 줄:1 문자:6 + curl -X GET 'localhost:3000' + ~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
선생님 premium 해결했습니다
선생님 콘솔로그 쳐서 premium위치 찾아서req.user.Domains[5].type === 'premium' 했는데 true 나와서 해결했습니다 감사합니다 앞으로 콘솔로그 쳐서 하는 습관가져야겠습니다 정말 감사합니다 ^_^!!!
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
SSR을 적용해야하는 부분과 그렇지않은 부분에 대해
강좌에서 알려주신대로 페이지의 getServerSideProps로 초기로드를 SSR하는 방식을제 프로젝트에서도 적용을 했는데요. 모든 페이지에 SSR을 진행하다보니막상 배포해서 돌려보면 첫페이지 로드를 빨리 보여주는 장점보다,서버에서 렌더링을 기다려야하는 단점이 눈에 띄게 보였습니다.사실 모든 페이지에서 SSR을 적용하면 기존의 전통적인 웹과 다를바가 없지않나라는생각들 들고, SEO vs SPA 둘 중의 하나의 고민으로 오게되는데 제로초님은 이런경우에어떤 기준으로 판단을 하시나요?getStaticProps() 가 SSG(static site generation)에 해당하고 getServerSideProps() 가 SSR(server side rendering)에 해당하는것이 맞나요?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
클러스트생성이 안보여요
몽고디비사이트에서 올가니제이션 만들고 프로젝트만들고 다음순서가 클러스트 생성인데현재 atlas 사이트 보면 클러스트 생성하는게 없어요
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
addPostToMe createSlice()로 처리하기
제가 redux toolkit으로 제로초님 강의를 따라가고 있는데 제로초님이 올려주신 toolkit 깃허브 코드에는 addPostToMe에 대해 reducers로 선언만 다른 코드에서 사용하는건 안보이는데 그래서 제가 강의내용과 비슷하게 수정을 했습니다user.js const userSlice = createSlice({ name: "user", initialState, reducers: { addPostToMe(draft, action) { draft.me.Posts.unshift({ id: action.payload }); }, removePostOfMe(draft, action) { draft.me.Posts = draft.me.Posts.filter((v) => v.id !== action.payload); }, }, }) export const { addPostToMe, removePostOfMe } = userSlice.actions;PostForm.js import { addPostToMe } from "../reducers/user"; const onSubmit = useCallback(() => { const id = shortId.generate(); dispatch(addPost({ id, text })); dispatch(addPostToMe()); }, [text]);이렇게 코드를 수정했는데 혹시 제로초님은 다른 방식으로 addPostToMe를 사용했는데 제가 발견을 못한걸까요?아니면 제가 작성한 코드에 뭔가 다른 문제가 생길 수도 있나요?
-
미해결Node.js 노드 빠르게 훑어보기: 서버부터 DB까지
글 작성 페이지 강의는 없는건가요?
글작성 페이지를 작성한부분이 누락된것같습니다. write.html 도 올려주시면 안될까요?
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
javascript 연습문제
javascript 연습문제를 더 풀어보고 싶은데 연습문제만 있는 곳이 있나요?
-
미해결Node.js 노드 빠르게 훑어보기: 서버부터 DB까지
전체 코드가 업로드된 곳이 있나요?
전체 코드가 업로드되어있는 깃허브 레포지토리 등이 있나요? 혹시 제가 못찾고 있는 거라면 알려주시면 감사하겠습니다.
-
미해결Node.js 노드 빠르게 훑어보기: 서버부터 DB까지
[2] 섹션4 강의 누락
섹션4 'MongoDB로 CRUD 구현하기'에서 'Datail 상세 페이지'와 'Delete 삭제' 강의 사이의 Edit 관련 강의가 누락되어있습니다. 빠른 확인 바랍니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
7.5 시퀄라이즈
안녕하세요 선생님 시퀄라이즈 강의를 듣는데 raw쿼리를 쓰는게 가능하더군요. spring + ibatis 로 주로 개발해와서 raw 쿼리가 익숙한데 실무에서는 시퀄라이즈 vs raw 쿼리 중에 어떤걸 많이 사용하는 편인가요..?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
application에 쿠키가 안들어는 문제
안녕하세요 소셜로그인 강의 듣다가 질문드립니다.소셜로그인을 했을때 네트워크에는 쿠키가 들어오는데 어플리케이션에는 쿠키가 들어가지 않더라구요.검색해보니 credential 문제인 것같아서 아래와 같이 추가 시켜줬는데도 안들어왔습니다.밑에 @Get부분에도 추가시켜주려고 했는데 방법을 잘모르겠습니다.어떻게 하면 쿠키가 들어오게 할 수있을까요??
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
하위 요소에 특정 데이터를 넘길 시, 필요한 데이터만 특정해서 넘기기 vs 객체 형태로 크게 넘기기
안녕하세요, 강사님"댓글구현하기"편을 보던 중 기존 업무에서도 궁금했던 점이 생각나 질문 남깁니다. 예를들어 부모요소에서 하위요소에 post객체에 속한 id값 하나만 전달하고자 합니다.그럴 때 <하위요소 post = {post}/>와 <하위요소 postId = {post.id}/> 중에 어떤 방식을 선호하시나요?단, 이때 자식요소에서 post의 id외에는 필요가 없습니다. 개인적으로는 다른 사람도 저의 코드를 보고 이해할때 '아! 이 자식 요소에서는 post의 id만 사용하는 구나' 딱 알수 있기 때문에 <하위요소 postId = {post.id}/>가 더 좋을 것 같다 생각했습니다. 강사님의 의견 여쭤보고 싶습니다. 답변 기다리겠습니다.감사합니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
Premium 문의…!
선생님 어제 코드 감사합니다 아쉽게도 많이 배워야할것같아서 ㅠㅜ 혹시 제가 빠트린 코드가 있을까요 ? 아니면 다른부분 확인할 사항이 있을까요? 작성한 코드 올려드립니다nodebird-api -> middlewares-> index.jsconst jwt = require("jsonwebtoken"); //토큰을 검사하는 미들웨어 const rateLimit = require("express-rate-limit"); const User = require("../models/user"); const { Domain } = require("../models/"); const cors = require("cors"); exports.isLoggedIn = (req, res, next) => { if (req.isAuthenticated()) { next(); } else { res.status(403).send("로그인 필요"); } }; exports.isNotLoggedIn = (req, res, next) => { if (!req.isAuthenticated()) { // 패스포트 통해서 로그인 안했으면 next(); } else { const message = encodeURIComponent("로그인한 상태입니다."); res.redirect(`/?error=${message}`); //localhost:8001? error=메시지 } }; //토근검사 exports.verifyToken = (req, res, next) => { try { res.locals.decoded = jwt.verify( req.headers.authorization, process.env.JWT_SECRET ); return next(); } catch (error) { if (error.name === "TokenExpiredError") { return res.status(419).json({ code: 419, message: "토큰이 만료되었습니다.", }); } return res.status(401).json({ code: 401, message: "유효하지 않은 토큰입니다.", }); } }; const limiter = rateLimit({ widowMs: 60 * 1000, max: (req, res) => { if (req.user?.Domains[0]?.type === "premium") { return 10; } return 1; }, handler(req, res) { res.status(this.statusCode).json({ code: this.statusCode, message: `1분에 ${ req.user?.Domains[0]?.type === "premium" ? "열" : "한" } 번만 요청 할 수 있습니다...`, }); }, }); exports.apiLimiter = async (req, res, next) => { let user; if (res.locals.decoded) { user = await User.findOne({ where: { id: res.locals.decoded.id }, include: { model: Domain }, }); } req.user = user; limiter(req, res, next); }; exports.deprecated = (req, res) => { res.status(410).json({ code: 410, message: "새로운 버전이 나왔습니다. 새로운 버전을 사용하세요", }); }; exports.corsWhenDomainMatches = async (req, res, next) => { const domain = await Domain.findOne({ where: { host: new URL(req.get("origin")).host }, }); if (domain) { cors({ origin: true, Credential: true, })(req, res, next); //미들웨어 확장패턴 } else { next(); } }; nodebird-api -> routes -> v2.jsconst express = require("express"); const { verifyToken, apiLimiter, corsWhenDomainMatches, } = require("../middlewares"); const { createToken, tokenTest, getMyPosts, getPostsByHashtag, } = require("../controllers/v2"); const cors = require("cors"); const router = express.Router(); router.use(corsWhenDomainMatches); router.use( cors({ origin: true, credentials: true, //쿠키요청 }) ); router.post("/token", apiLimiter, createToken); router.get("/test", verifyToken, apiLimiter, tokenTest); router.get("/posts/my", verifyToken, apiLimiter, getMyPosts); // GET /v2/posts/hashtag/:title router.get("/posts/hashtag/:title", verifyToken, apiLimiter, getPostsByHashtag); module.exports = router;
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
MySQL Workbench 예기치 못한 상황에 종료되었습니다. ( 버전문제 )
프론트 부분 회원가입한 후 router설정 까지 끝낸 후,회원정보가 잘 들어갔는지 확인하기 위해 Workbench에서 Users테이블을 클릭 했는데,,바로 예기치 않게 종료되었습니다.가 떴습니다.구글링 해본 결과 버전이 문제인데싹 - 지우고 다운그레이 하라고 하더라구요. 지금 버전이 8.0.32 인데몇으로 다운그레이 해야할까요 ? + 그 전까지는 잘 작동되던 워크벤치가 왜 갑자기 버전충돌이 일어난거죠 ?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
redux toolkit payload data 질문
https://github.com/ZeroCho/react-nodebird/tree/master/toolkitredux toolkit으로 바꾸면서 제로초님 강의를 듣고있는데 .addCase(addComment.fulfilled, (draft, action) => { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); console.log('draft', draft, 'post', post, 'Comments', post.Coments); post.Comments.unshift(action.data); draft.addCommentLoading = false; draft.addCommentDone = true; })이런 코드를 보면 action.data이렇게 action에서 data를 가져오는데 제가 redux devtools에서 봤을 때 action안에 값들은 action.payload에 저장이 되어있는거 같습니다 혹시 값들을 action.data로 저장하는 방법이 있나요?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
swagger 404
문서와 동일하고 동영상과 동일하게 작성했습니다. npm install --save @nestjs/swagger 그런데 404가 뜨네요... 원인을 잘 모르겠습니다. import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';import * as process from 'process';import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';declare const module: any;async function bootstrap() {const app = await NestFactory.create(AppModule);const port = process.env.PORT;await app.listen(port);console.log(`listening on port ${port}`);const config = new DocumentBuilder().setTitle('Sleact Api').setDescription('Sleact 개발을 위한 API 문서').setVersion('1.0').addTag('sleact').build();const document = SwaggerModule.createDocument(app, config);SwaggerModule.setup('api', app, document);if (module.hot) {module.hot.accept();module.hot.dispose(() => app.close());}}bootstrap();
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
CSRF
안녕하세요 도저히 찾아봐도... 찾을 수가 없고 답답한 나머지 멘토님께 여쭈어보려고 합니다.현재 저는 백엔드 코스와 프런트엔드 코스를 둘 다 수강 중인 학생입니다. 백엔드 코스에서 공부한 이미지 업로드를 프런트에서 공부한 이미지 불러오기를 적용하던 중 오류가 발생하여 문의드립니다.포스트맨을 통해 이미지 업로드 정상 작동되는 것을 확인하였지만 프런트 엔드와 같이 연결하여 이미지 업로드를 진행 중"This operation has been blocked as a potential Cross-Site Request Forgery (CSRF). Please either specify a 'content-type' header (with a type that is not one of application/x-www-form-urlencoded, multipart/form-data, text/plain) or provide a non-empty value for one of the following headers: x-apollo-operation-name, apollo-require-preflight\n" 이러한 원인이 설명 부탁 드립니다... ...
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
ReferenceError: reducer is not define 오류
configureStore.js 파일을 강좌와 똑같이 진행하였는데해당오류가 발생합니다. 강의를 계속 진행하면 해결될까요?configure.js _app.jspackage.json
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
바뀐 버전의 강의에서 커리큘럼 질문
안녕하세요.바뀐 버전의 강의에서는 elastic search에 관한 내용이 없는 것 같던데 혹시 없어진 이유가 있나요??
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
콘솔에 DOM이라는 로그가 뜨는데
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 에러코드도 아닌데 왜 뜰까요??제가 console.log로 한것도 아닌데 안뜨게 할 수 없을까요?