묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
axios를 활용한 데이터 통신
핸드폰 번호를 입력하면 페이지 상에서는개발자 도구에서 이렇게 잘 나오지만vscode console에 찍어보면 myphone 번호가 아니라 undefined로 나옵니다.아래는 phone.js 코드입니다. (length에서 자꾸 에러가 나서 그 부분만 수정된 코드입니다.)function checkPhone(myphone) { //1. 휴대폰 번호 자릿수 맞는지 확인하기(10-11자리) if (myphone && myphone.length < 10 || myphone && myphone.length > 11) { console.log("에러 발생!!! 휴대폰 번호를 제대로 입력해주세요."); return false; } else { return true; } } //2. 인증번호 6자리 만들기 function getToken() { const result = String(Math.floor(Math.random() * 1000000)).padStart(6, "0"); console.log(result); return result; } //3. 핸드폰 번호에 토큰 전송하기 function sendTokenToSMS(myphone, result) { console.log(myphone+ "번호로 인증번호" + result + "를 전송합니다."); } module.exports = { checkPhone, getToken, sendTokenToSMS };이건 signup.html<!DOCTYPE html> <html lang="ko"> <head> <title>회원가입 연습하기</title> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> function zzz(){ //1. 입력한 휴대폰 번호 가져오기 const myphone = document.getElementById("myphone").value console.log("나의 핸드폰 번호 : ", myphone) //2. 해당 휴대폰 번호로 인증번호 API 요청하기 axios.post("http://localhost:3000/tokens/phone", { qqq: myphone }).then((res) =>{ console.log(res.data) document.getElementById("result").innerText = res.data }) } </script> </head> <body> 휴대폰 번호 : <input id="myphone" type="text"/><button onclick="zzz()">인증하기</button> <div id="result">인증상태</div> <button>회원가입하기</button> </body> </html> index.js const express = require('express'); const { checkPhone, getToken, sendTokenToSMS } = require('./phone.js'); const swaggerUi = require('swagger-ui-express'); const swaggerJsdoc = require('swagger-jsdoc'); const {options} = require('./swagger/config.js'); const swaggerSpec = swaggerJsdoc(options); const cors = require('cors'); const app = express(); //use : 모든 메소드에서 작동한다. app.use(express.json()) app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec)); app.use(cors()) //GET 방식의 API를 만들겠다. //endpoint는 /로 하겠다. // /qqq이쪽 endpoint로 누군가 요청을 하면 아래 함수를 실행을 시키겠다. app.get('/boards', function (req, res) { //1.DB에 접속 후, 데이터를 조회. 조회한 데이터를 객체로 담아온다. const result = [ {number : 1, writer: "철수", title : "제목입니다.", contents: "내용이에요."}, {number : 2, writer: "영희", title : "제목입니다.", contents: "내용이에요."}, {number : 3, writer: "훈이", title : "제목입니다.", contents: "내용이에요."}, ] //2.DB에서 꺼내온 결과를 브라우저에 응답(response)으로 주기 res.send(result) }, function (req, res){ }) app.post('/boards', function (req, res) { //1. 브라우저에서 보내준 데이터 확인하기 console.log(req) console.log("=====") console.log(req.body) //2. DB에 접속 후, 브라우저에서 받은 데이터를 디비에 저장해야 함. //3. DB에 저장된 결과를 브라우저에 응답(response) 주기 res.send('게시물 등록에 성공하였습니다.') }) app.post('/tokens/phone', function(req, res){ const myphone = req.body.phone //1. 휴대폰번호 자릿수 맞는지 확인 (10-11자리) const isValid = checkPhone(myphone) if(isValid === false) return //2. 핸드폰 토큰 6자리 만들기 const myToken = getToken() //3. 핸드폰 번호에 토큰 전송하기 sendTokenToSMS(myphone, myToken) res.send("인증완료!!!") }) //포스트맨에서 send 버튼 누르는 것 = 기다린다 = listen app.listen(3000)
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
한글파일명 업로드시 파일명 깨짐 현상
안녕하세요.강의를 듣고 포스트맨으로 파일을 올리고 있습니다.영어파일명은 파일명이 정상적을 변환되는데한글파일명은 파일명이 깨져서 변환됩니다.-물리적 파일명도 깨지고 디비에도 깨진파일명이 저장됩니다. 깨진파일명으로 크롬에서 불러오면 에러가 납니다.한글파일명을 해결할수 있는 방법이 있을까요?
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
virtual 필드 만드는 과정에서 id를 찾을 수 없습니다.
보시다시피 id값을 찾지를 못하네요.혹시 해결하시분 계실까요
-
미해결따라하며 배우는 NestJS
구현 완료 후 not a function 오류
구현완료후 postman에서 localhost:3000/auth/signup 에 post 했더니 this.userRepository.createUser is not a function이라는 에러가 납니다. 정확히 모두 따라했는데 왜 에러가 나는지 모르겠습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
문의 드립니다
안녕하세요 백엔드쪽로 준비하는 사람이면 로드맵으로 두개다 구매해도 우선 백엔드쪽 강의 수강만 집중하는것이 나을까요?아님 프론트-> 백엔드 순으로 하면 더 도움이될까요?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
axios로 http 요청시 req,res 로깅하는 방법을 찾고있습니다.
안녕하세요 nest.js 로깅 관련해서 질문 넣을게요 axios로 http 요청 주고받을때 req, res에서 로깅을 하고 싶은데요...검색해보면 https://stackoverflow.com/questions/55431189/nestjs-logging-the-request-response-from-httpservice-callsthis.httpService.axiosRef.interceptors.request.use(config => console.log(config)); 이렇게 사용하라고 추천해주셨는데, 혹시 req,res 로그를 보거나 쌓을 수있는 다른 방법이 있을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
graphQL에서 @apollo/server의 port번호는 4000번으로 default가 되어있는것 같습니다.
v3버전 이후로는 server.listen에 대한 값이 없는것같아서 port번호를 4000번으로 기본설정해놓는걸 console.log로 확인할 수 있는 방법과 혹시 port번호를 변경하고자 할때는 어떻게 해야하는지 알 수 있을까요?계속 해메고 있네요,,,
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
VSCode 백틱(``) 내의 글자 색상
안녕하세요.강의를 보면 강의자님의 VSCODE 에서는 백틱 내에서도변수, 함수 등이 글자 색상이 각각 다르게 표현됩니다.그런데 제 VSCODE에서는 백틱 내에서는 모두주황색으로 나옵니다.이 부분은 어떻게 옵션을 바꿔야하나요?구글링해도 못 찾겠네요.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
학습 자료 ver.2의 링크는 어디서 확인할 수 있을까요?
강의를 듣다보니 새로운 업데이트 된게 있어서 그쪽을 들으려고 하는데 혹시 학습 자료 ver.2의 노션 링크는 어디서 확인할 수 있을까요? 아니면 기존의 [Backend] 학습 자료 ver.1이 업데이트 된건가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
노션 과제에 대한 해설을 볼 수 있는 곳이 있나요?
안녕하세요.이번 강의를 신청하고 듣고있는데요.과제를 풀어보려고 하는데 그에대한 정답이나 해설에 대해서 안내되어있는것이 있는지 궁금합니다.
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
Pipe와 middleware와의 차이가 무엇일까요 ?
Pipe와 Middleware 둘다 클라이언트로부터 데이터를 받는다면, 데이터를 중간중간 가공하여 처리하는것으로 이해하고있습니다.허나 Pipe는 주로 유효성검사같은 타당성 검사에 촛점을 맞춘것일까요 ?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
getResponse() 메소드 질문입니다.
해당 강의에서 'api broken' 메세지를 내보낼때, throw가 에러를 인위적으로 에러를 던지는것은 알고있으나, 여기서 던진 에러를 어떻게 받아서 'api broken'을 출력시키는지 감이 올듯 안올듯 한데,exception 안에 getResponse()라는 메소드가 그 던진 에러를 받아주는 역할을 하는게 맞는것일까요 ?
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
테이블 관계 질문한가지 있습니다!
안녕하세요. 강좌를 바탕으로 개인적으로 토이 프로젝트를 만들어보려고 하고있는데요.지도에 마커로 위치를 표시할수 있고, 마커 하나당 게시글 하나를 포함합니다. 게시글에는 제목, 설명, 사진이 들어갑니다. 프론트에서 지도화면에서는 마커들을 표시하고 마커 하나를 눌렀을때 해당하는 게시글과 사진을 보여주고 싶습니다. 마커 테이블과 게시글 테이블을 만들어서 one to one 관계가 좋을까요, 아니면 이런경우 하나의 테이블에 마커와 게시글 정보를 넣으면 될까요? chatGPT를 사용해봤는데 답변이 두가지입니다.Marker와 Post 테이블 간에 일대일 (one-to-one) 관계를 설정하는것이 좋다. Marker와 Post 테이블을 조인하여 필요한 정보를 가져올 수 있다.하나의 테이블에 마커와 게시글 정보를 함께 저장하고, 해당 정보를 조회할 때는 필요한 컬럼들만 선택하여 조회하는 것이 좋다. 마커 정보와 게시글 정보가 함께 저장되므로, 마커를 클릭하여 게시글 정보를 조회할 때 JOIN 연산이 필요하지 않아 성능상 이점이 있다. 테이블 구조를 어떻게 짜는것이 맞는것인가요? 그리고 테이블 구조 짜는것이 어려운데 이런것을 판단하기 위해 어떻게 학습하면 좋을까요?
-
미해결따라하며 배우는 NestJS
@UseGuards(AuthGuard()) 를 사용하지않고
@UseGuards(AuthGuard()) 를 사용하지않고 Passport jwt 전략을 사용할 순 없나요?영상에서 @UseGuards(AuthGuard()) 등록 전 api request를 하셨는데 그때도 passport를 거쳐간건지 궁금합니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
Identifying relation 과 non-identifying relation
안녕하세요! 보여주신 erd에서 궁금증이 생겨서 질문 드립니다.dms의 ReciverId과 mentions의 Receiverid 만 Non-identifying relation으로 맺어져 있고 나머지 관계들은 모두 Identifying Relation으로 맺어져 있는 이유가 뭘까요?Non-Identifying Relation과 Identifying Relation의 차이는 Non의 경우는 부모와 자식의 관계를 맺을때 자식이 부모 없이도 독립적으로 존재 가능한 것이고, Identifying-Relation은 자식이 부모 없이는 존재가 불가능한 차이로 알고 있습니다. DM과 Mention의 Receiver가 존재하지 않는다면, DM과 Mention의 정보가 불완전해질 것 같은데, 왜 non-identifying 일까요?typeorm entity 코드를 봐도, DM과 User entity의 Sender와 Receiver의 코드가 완전 똑같은데, 왜 ERD에서는 Receiver는 non-identifying 이고 Sender는 identifying인지 모르겠습니다.
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
@Get(':id') @Get('all')
@Get(':id') getOneCat(@Param('id', PositiveIntPipe) id: number) { console.log(id, typeof id); return 'one cat'; }이전에 작성되었던 아이디로 검색 메서드가 있었는데요,이번 강의에서 @Get('all') 을 추가해서포스트맨으로 테스트하는데 위에 getOneCat 으로 넘어가는데 왜 이런건지 알 수 있을까요?@ApiOperation({ summary: '현재 고양이 가져오가' }) @UseGuards(JwtAuthGuard) @Get() getCurrentCat(@CurrentUser() cat) { return cat.readOnlyData; }만약 이게 더 위에 있다면, 여기서 걸린다면 이해 하겠는데그렇지도 않고 @Get('all') 일때만 걸리는 이유가 뭘까요..?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
pm2 에러
ec2-ubuntu 환경에서 pm2사용하는데sudo npm run start:prodcross-env NODE_ENV=production PORT=80 pm2 start dist/src/main.js실행하였는데Error: EACCES: permission denied, mkdir '/root/.pm2/logs'Error: EACCES: permission denied, mkdir '/root/.pm2/pids'Error: EACCES: permission denied, open '/root/.pm2/module_conf.json'Error: EACCES: permission denied, mkdir '/root/.pm2/modules'에러가 발생해서 제로초님이 답변하신거 찾아보고 노드 재설치도 했는데같은 에러가 발생합니다
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
[ERR_ASSERTION]에러....
안녕하세요 정말 열심히 듣고 있었지만 오류가 발생하자 아무리 찾아도 나오지 않아 답답해서 문의 드립니다. 강의: 크롤링 2 - puppeteerdocker-compose up 으로 실행 하였고crawler 를 node index.js 실행 하자 저런 에러들이 발생하였습니다.... 해결 방법이 있을까요??
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
dist/main.js 경로
Script not found: C:\Users\USER\Documents\project\linkfit-backend\dist\main.js이렇게 에러가 나서 보니까 main.js경로가 dist/src/main.js에 있던데 이게 맞나요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
상태코드 질문
async loginUser({ email, password, context }) { const user = await this.userService.findOne({ email }); if (!user) throw new UnprocessableEntityException('이메일이 없습니다.'); const isAuth = bcrypt.compare(password, user.password); if (!isAuth) throw new UnprocessableEntityException('비밀번호가 틀렸습니다.'); await this.setRefreshToken({ user, res: context.res }); return await this.setAccessToken({ user, res: context.res }); }이렇게 아이디 비번이 다를때 오류 처리를 해주었는데 client에 넘어가는 status코든는 200이 뜨네요 왜 그럴까요?