172만명의 커뮤니티!! 함께 토론해봐요.
미해결
탄탄한 백엔드 NestJS, 기초부터 심화까지
터미널에 npm run start:dev 를 입력하면 자꾸 Error: Cannot find module 라는 에러가 뜹니다;; npm를 지웠다 깔기도 하고, node module 폴더를 삭제하기도하고, lock.json 파일을 삭제해보기도 했는데 여전히 계속 에러가 뜨는데 왜 이런건가요?.....
node.js mongodb express nestjs ssr
임동규(DongGyu Im)
2023-08-04T14:37:15.044Z
댓글 1
좋아요 0
조회수 722
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
안녕하세요. express 에서 rest 방식에서는 API를 생성할 때, get이나 post 등의 메소드 방식을 정하고 주소를 지정하여 프론트엔드에서 fetch 나 axois 함수에 주소를 기입하여 API 요청을 했었습니다. graphQL 방식의 nestjs에서는 프론트엔드에서 API 요청을 보낼 때 어떤 방식으로 하나요? 따로 주소 같은 것을 지정해주지는 않는 것같은데.. 똑같이 fetch 나 axois 함수를 통해 요청을 하는 건가요?
javascript node.js express docker tdd rest-api nestjs
장정욱
2023-08-04T13:16:00.564Z
댓글 1
좋아요 1
조회수 434
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
완강하면 코테,CS 준비하면 되나요? 근데 코테 언어는 어떤 걸로 준비해야 할까요
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-04T12:33:19.190Z
댓글 1
좋아요 0
조회수 755
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker rm `docker ps -a- q'라고 입력했는데 unknown shorthand flag: 'a' in -a- 라고 에러 뜹니다
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-04T04:34:01.815Z
댓글 1
좋아요 0
조회수 768
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
안녕하세요 원두멘토님ㅎㅎ 이런 에러가 계속 떠서 docs와 스텍오버플로우에 검색을 해보니 Passport-jwt를 import하는 것이 아닌 passport-local을 import하는 것이라해서 했더니 다행히 실행이 됩니다. 수업내용에서는 passport-jwt로만 해도 작동이 잘되는 것 같은데 왜 이런 문제가 생기는 것일까요? 그리고 passport-local로 하면 실제 배포에서는 사용 못하는 것이 아닌지 질문을 남깁니다. p.s 재작년에 코캠2기 수료하고 백엔드를 많이 기다렸는데 이렇게 인프런에서 다시 인강으로 뵙게 되서 너무 반갑습니다
javascript node.js express docker tdd rest-api nestjs
이주환
2023-08-04T01:37:34.867Z
댓글 2
좋아요 0
조회수 345
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
cheerio로 가져온값을 객체로 만든다음 밖으로 보내서 최종적으로 몽구스로 저장하고싶은데 문제가 생겼던게 저상태로 보내면 [object:object] 로 나오므로 JSON.stringfy()작업으로 문자열 형태로 내보내 주었습니다. 하지만 schema부분을 object로 하여도 object가 가장 상위의 데이터 타입으로 string형태로 저장된다고 여겨졌습니다. 그래서 JSON.stringfy()로 빼내고 저장하는 부분에서 JSON.parse로 하여 다시 저장할려 했지만 다시 [object:object]로 나와서 이부분을 어떻게 해결해야할지 잘찾아봐도 모르겠어서 질문 남겼습니다. // siteInfo.js import axios from "axios"; import cheerio from "cheerio"; export class SiteInfo { siteInfo = async (prefer) => { console.log(prefer); const siteData = await axios .get(prefer) .then() .catch((err) => { console.log("서버 데이터 안받아와짐 오류 : " + err); }); const keys = []; const values = []; const $ = cheerio.load(siteData.data); $("meta").each((index, el) => { if ( $(el).attr("property") && ($(el).attr("property").includes("og:title") || $(el).attr("property").includes("og:description") || $(el).attr("property").includes("og:image")) ) { const content = $(el).attr("content"); const title = $(el).attr("property"); keys.push(title); values.push(content); } }); const arr = []; for (let i = 0; i < keys.length; i++) { arr.push({ [keys[i]]: values[i], }); } console.log("여기 테스트 : " + arr); return arr; }; } // signup.controller.js export class SignupController { siteInfoService; isValueService; saveDataService; emailService; constructor(siteInfoService, isValueService, saveDataService, emailService) { this.siteInfoService = siteInfoService; this.isValueService = isValueService; this.saveDataService = saveDataService; this.emailService = emailService; } singUp = async (req, res) => { const name = req.body.name; const email = req.body.email; const personal = req.body.personal; const prefer = req.body.prefer; const pwd = req.body.pwd; const phone = req.body.phone; console.log(req.body); const hasValue = this.isValueService.checkToken(phone); if (hasValue === false) { res.json("isAuth값이 false입니다"); } const siteInfo = await this.siteInfoService.siteInfo(prefer); const ttt = JSON.parse(siteInfo); console.log("여기 문제 발생 : " + typeof ttt); console.dir("여기 문제 발생 22222: " + ttt); const dataSave = await this.saveDataService.dataSave({ name, email, personal, prefer, pwd, phone, siteInfo, }); const isValue = this.emailService.checkMail(email); if (isValue === false) { res.send("이메일 형식이 잘못되었습니다"); } const template = this.emailService.welcomeMessage({ name, phone, prefer }); this.emailService.sendTemplateToEmail({ template, email, }); res.send("_id : " + dataSave); }; userSearch = async (req, res) => { const searchReault = await this.saveDataService.dataSearch(); console.log(searchReault); res.send(searchReault); }; } // index.js import express from "express"; import mongoose from "mongoose"; import cors from "cors"; // import { Token, User } from "./mvc/model/schema.model.js"; import { TokenController } from "./mvc/controller/token.controller.js"; import { SignupController } from "./mvc/controller/signup.controller.js"; // 사이트 정보 가져오기 import { SiteInfo } from "./mvc/controller/service/siteInfo.js"; // 핸드폰 정보 맞는지 boolean으로 import { CheckToken } from "./mvc/controller/service/token.js"; // db저장하고 리턴값 가져오기 import { UserDb } from "./mvc/controller/service/userDb.js"; // 이메일 확인하고 보내주기 import { EmailService } from "./mvc/controller/service/email.js"; // 핸드폰 문자 보내기 import { PhoneService } from "./mvc/controller/service/phone.js"; const app = express(); const corsOptions = { origin: "http://127.0.0.1:5500", }; app.use(cors(corsOptions)); const siteInfo = new SiteInfo(); const checkToken = new CheckToken(); const userDb = new UserDb(); const emailService = new EmailService(); const phoneService = new PhoneService(); app.use(express.json()); const signUpController = new SignupController( siteInfo, checkToken, userDb, emailService ); app.post("/users", signUpController.singUp); app.get("/users", signUpController.userSearch); const tokenController = new TokenController(phoneService, checkToken); app.post("/tokens/phone", tokenController.insertdata); app.patch("/tokens/phone", tokenController.checkToken); mongoose.set("debug", true); mongoose .connect("mongodb://mongodb-file:27017/dockerconnetor") .then(() => { console.log("connect success"); }) .catch(() => { console.log("fail to connect with db"); }); app.listen(3001, () => { console.log("server open"); }); // userDb.js import { User } from "../../model/schema.model.js"; export class UserDb { dataSave = async ({ name, email, personal, prefer, pwd, phone, siteInfo, }) => { const siteInforesult = JSON.parse(siteInfo); console.log("여기 확인 : " + siteInforesult); const data = new User({ name: name, email: email, personal: personal, prefer: prefer, pwd: pwd, phone: phone, siteInfo: siteInfo, }); await data.save(); const idData = await User.findOne({ phone: phone }, { _id: 1 }).exec(); return idData._id; }; dataSearch = async (name) => { console.log("start datasearch"); const result = await User.find().exec(); return result; }; } // schema.model.js import mongoose from "mongoose"; const tokenSchema = new mongoose.Schema({ phone: String, token: Number, isAuth: Boolean, }); export const Token = mongoose.model("Token", tokenSchema); const userSchema = new mongoose.Schema({ name: String, email: String, personal: String, prefer: String, pwd: String, phone: String, siteInfo: { title: String, content: String, image: String, }, }); export const User = mongoose.model("User", userSchema);
javascript node.js express docker tdd rest-api nestjs
jay kang
2023-08-03T08:18:04.859Z
댓글 1
좋아요 0
조회수 589
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker 빌드하고 이미지를 4시간 전에 만들었는데 방금 또 빌드하고 이미지 했더니 4시간 전에 만든거라고 나왔어요.그리고 IMAGES ID도 똑같네요
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-03T04:47:26.546Z
댓글 1
좋아요 0
조회수 362
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 MemberServiceIntegrationTest 에서 회원가입을 run하는 과정중에, 처음에는 NullPointerException 이 뜨다가, 코드수정만 했는데 이제는 아얘 실행조차 안되고 다음과 같이 오류가 뜹니다 __________________ 위의 오류를 해결하려고 아래와 같이 src/java/main을 소스루트로 지정했습니다 캐쉬삭제도 해보고 이것저것 해봤는데 실행조차 안됩니다 어떻게 고쳐야하나요 ... ㅠㅠ 도와주세요 ..
study
2023-08-03T04:38:36.859Z
댓글 2
좋아요 0
조회수 417
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
지금 nodejs 듣고 있는데 제가 중소기업해서 취업해서 나중에 대기업 가고 싶은데 일단 중소기업 취업 먼저 생각해보면 node만 공부하는게 낫나요
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-03T03:37:17.373Z
댓글 1
좋아요 0
조회수 430
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
vscode에서 명령어 입력하고 docker 실행 명령어도 입력했는데 powershell이나 다른 프로그램에서도 명령어 많이 알아야하나요
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-03T01:09:53.580Z
댓글 1
좋아요 0
조회수 229
미해결
Slack 클론 코딩[백엔드 with NestJS + TypeORM]
제가 아래 순서대로 진행하여 해결했습니다. https://www.npmjs.com/package/typeorm-extension 의 스크립트를 참고하였는가 MySQL hosts파일에 ::1이 localhost로 바인딩되어있는 부분을 주석처리하기 이게 어려우면 localhost대신 루프백주소를 넣으세요 이래도 안되면 에러 코드 다시 읽어보기 그래도 안되면 chatGPT한테 물어보기 참고로, 강사님이 쓰는 extension이랑 최신버전이랑 사용법이 약간 다른 것 같은데 자세히는 아직 안봤지만 각자 1번은 무조건 확인하십쇼
node.js express nestjs typeorm
김경호
2023-08-02T12:23:18.372Z
댓글 2
좋아요 0
조회수 2099
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
구글 앱 비밀번호 설정 떄문에 막힙니다 2단계 인증했고 앱 비밀번호 생성해서 그걸 구글 비밀번호로 바꾸고 선생님 코드를 잘 따라해서 적었는데 Error: Invalid login: 535-5.7.8 Username and Password not accepted. 라고 에러 납니다 혹시 방법 없을까요?
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-02T04:39:30.069Z
댓글 1
좋아요 0
조회수 378
미해결
[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
안녕하세요! 강사님 강의를 끝까지 다 수강하였습니다. 너무 도움이 많이 되었습니다. 감사합니다. 부동산 매물 강의에 대한 공지를 보고 메일로 문의 드렸는데 아직 피드백이 오지 않아 이렇게 질문글로 문의를 드리게 되었습니다! 메일 문의 한 번만 확인 부탁드립니다. 감사합니다!
2023-08-02T02:47:21.688Z
댓글 1
좋아요 0
조회수 275
미해결
자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Java 에서 Final 만 사용할 수 있는게 외부 변수가 메모리에서 해제 되었을 경우, 가비지를 참조할 수 있는 것을 방지하기 위해서로 알고 있는데 코틀린은 이게 가능한게 아예 메모리를 통째로 떠와서 그런걸까요? ㅎㅎ 강의 영상에서 포획한다 라고 표현하신게 그런 의미 같아요!
목동 개발자
2023-08-02T01:45:22.433Z
댓글 1
좋아요 2
조회수 409
해결됨
자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
함수가 1급객체가 되어버려서 functional interface가 필요없어진 것처럼 보여요
목동 개발자
2023-08-02T01:30:52.989Z
댓글 1
좋아요 2
조회수 615
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
질문입니다 type Mutation { createBoard(createBoardInput: CreateBoardInput!):String } 에서 맨 마지막에 왜 createBoard는 String이 붙고 type Query{ fetchBoards: [MyResult] } 에서 fetchBoards는 맨 마지막에 String이 안 붙나요? fetchBoards: [MyResult]:String 이렇게 될수도 있지 않나요 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ const typeDefs = `#graphql type Query{ fetchBoards: [MyResult] } type Mutation { createBoard(createBoardInput: CreateBoardInput!):String } `; const resolvers = { Query: { fetchBoards: (parent, args, context, info) => { const result = [ { number: 1, writer: "철수", title: "제목입니다", contents: "내용이에요", }, {number: 2,writer: "영희", title: "제목입니다",contents: "영희이에요",}, { number: 3, writer: "훈이", title: "제목입니다",contents: "훈이이에요", },]; return result; } }, Mutation: { createBoard: (_, args) => { console.log(args); onsole.log("========================="); console.log(args.createBoardInput.writer); console.log(args.createBoardInput.title); console.log(args.createBoardInput.contents); return "게시물 등록에 성공하였습니다"; }, }, };
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-01T22:32:33.586Z
댓글 1
좋아요 0
조회수 308
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
인강 40분짜리 3개 듣고 복습해서 총 5시간을 소비했는데 잘 하고 있는 건지 궁금해요
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-01T10:22:14.845Z
댓글 1
좋아요 0
조회수 289
미해결
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
강의 하나 들을 때마다 에러가 너무 많이 떠서 진도가 안나가서 미칠 지경이네요 ㅠㅠ docker-compose.yaml 파일을 아래와 같이 설정하고 docker-compose build를 하니 services.mydb.environment.0 must be a string 라는 에러가 떠서 구글링을 하니 environment: - MYSQL_DATABASE: 'dockerProject' - MYSQL_ROOT_PASSWORD: 'root' 여기서 띄어쓰기를 없애보라고 하길래 아래와 같이 띄어쓰기를 없앤채로 .yaml파일을 변경하였습니다. version: '3.7' services: mybackend: build: context: . dockerfile: Dockerfile volumes: - ./src:/myfolder/src ports: - 3000:3000 env_file: - ./.env.docker mydb: # platform: linux/86_64 image: mysql:8.0.34 environment: - MYSQL_DATABASE:'dockerProject' - MYSQL_ROOT_PASSWORD:'root' ports: - 3306:3306 그리고는 docker-compose build 이후 up을 실행했으나 ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)... 에러가 계속 발생합니다.(docker 말고 내 로컬컴퓨터에서는 mysql 연결 잘 되었음) 다른 질문자 분들 내용을 참조하여 package.json 파일의 mysql2와 typeorm의 버전을 아래와 같이 바꾸었고, .yaml 파일에서도 mysql 버전을 latest에서 8.0.34로 지정해주었습니다. { "name": "graghql", "version": "0.0.1", "description": "", "author": "", "private": true, "license": "UNLICENSED", "scripts": { "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { "@apollo/server": "^4.9.0", "@nestjs/apollo": "^12.0.7", "@nestjs/common": "^10.0.0", "@nestjs/config": "^3.0.0", "@nestjs/core": "^10.0.0", "@nestjs/graphql": "^12.0.8", "@nestjs/platform-express": "^10.0.0", "@nestjs/typeorm": "^10.0.0", "graphql": "^16.7.1", "mysql2": "3.2.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "typeorm": "^0.3.12" }, "devDependencies": { "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "@types/node": "^20.3.1", "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^5.59.11", "@typescript-eslint/parser": "^5.59.11", "eslint": "^8.42.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", "jest": "^29.5.0", "prettier": "^2.8.8", "source-map-support": "^0.5.21", "supertest": "^6.3.3", "ts-jest": "^29.1.0", "ts-loader": "^9.4.3", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", "typescript": "^5.1.3" }, "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" } } 그런데도 똑같이 ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)... 에러가 발생하여 node_modules 파일 및 dist 파일을 삭제 후 다시 yarn install을 했는데, 이제는 import도 되지 않습니다.... 에러 때문에 진도가 나가질 않아, 중간중간에 강의를 멈춰가며 강의와 똑같이 따라가고 있는데 왜 이런 에러가 계속 발생할까요 ㅠㅠ
javascript node.js express docker tdd rest-api nestjs
2023-08-01T05:39:48.352Z
댓글 2
좋아요 0
조회수 692
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
객체로 나타낼 떄 따옴표 쓰는 거 하고 쌍따옴표 쓰는 거 하고 뭔 차이인가요? 그리고 따옴표 쓰면 계속 따옴표 쓰고, 쌍따옴표 쓰면 계속 쌍따옴표로 써야하나요?
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-01T05:23:12.193Z
댓글 1
좋아요 0
조회수 248
해결됨
[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
선생님께서는 type Mutation { createBoard(createBoardInput: CreateBoardInput!):String } 밸류 CretaBoardInput !을 그룹으로 묶어서 input CreateBoardInput{ writer:String title:String contents: String } 이렇게 나타내셨는데 , 그런데 키 createBoardInput은 뭘 나타내는 건가요? 혹시, 객체를 그룹으로 묶으면 키,밸류를 똑같은 이름으로 지어야 하나요>?
javascript node.js express docker tdd rest-api nestjs
kql 1
2023-08-01T00:49:57.558Z
댓글 1
좋아요 0
조회수 344