inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

수업 내용에 대해 질문드립니다.

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

안녕하세요 http.createServer(async (req, res) => { try { if (req.method === 'GET') { if (req.url === '/') { const data = await fs.readFile(path.join(__dirname, 'restFront.html')); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); return res.end(data); } else if (req.url === '/about') { const data = await fs.readFile(path.join(__dirname, 'about.html')); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); return res.end(data); } else if (req.url === '/users') { res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' }); return res.end(JSON.stringify(users)); } // /도 /about도 /users도 아니면 try { const data = await fs.readFile(path.join(__dirname, req.url)); return res.end(data); } catch (err) { // 주소에 해당하는 라우트를 못 찾았다는 404 Not Found error 발생 } restFront.js , restFront.css 등을 받아오는 try 부분에서 강의에는 const data = await fs.readFile(`.${req.url)`);로 수업하셨는데 책과 깃헙예제에는 const data = await fs.readFile(path.join(__dirname, req.url)); 로 되어있어가지구요 1. .${req.url} 에서 백틱과 .은 꼭 쓰여야 하는건지랑 2. 책의 예제코드에서 __dirname의 경로는 restServer.js가 있는 위치가 기준이 되는건지 질문드립니다. else if (req.method === 'POST') { if (req.url === '/user') { let body = ''; // 요청의 body를 stream 형식으로 받음 req.on('data', (data) => { body += data; }); // 요청의 body를 다 받은 후 실행됨 return req.on('end', () => { console.log('POST 본문(Body):', body); const { name } = JSON.parse(body); const id = Date.now(); users[id] = name; res.writeHead(201, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end('등록 성공'); }); } } return req.on('end', () =>{}) 에서 'end'라는 이벤트가 어느 부분에서 발생해서 저기 들어가는건지도 궁금합니다.

  • mysql
  • nodejs
  • mongodb
  • typescript
  • Socket.io
  • express
  • jwt
Donggun Jang 댓글 1 좋아요 0 조회수 516

강사님 질문이있습니다 ㅠㅠ

미해결

스프링부트 시큐리티 & JWT 강의

public class MyCustomDsl extends AbstractHttpConfigurer<MyCustomDsl, HttpSecurity> { @Override public void configure(HttpSecurity http) throws Exception { System.out.println("체크포인트!@@!@!@!@"); AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class); http .addFilter(new LoginFilter(authenticationManager)) .addFilterAfter(jwtFilter, UsernamePasswordAuthenticationFilter.class); } } 를 구현하고, 로그인이 완료 되었을 때, @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { log.info("successfulAuthentication 함수 실행: 로그인 성공"); PrincipalDetails principalDetails = (PrincipalDetails) authResult.getPrincipal(); /* 로그인 완료, 1. 토큰 생성 2. 쿠키 장착 */ response.setHeader("gd", "gdgd"); // response.sendRedirect("/api/loginTest"); // super.successfulAuthentication(request, response, chain, authResult); } 이 메서드 까지 구현했습니다. 제 원래 로직은 액세스 토큰, 리프레쉬 토큰을 생성하고 리프레쉬 토큰을 DB에 담고 액세스 토큰, 레프레쉬 토큰 두 개를 쿠키에 저장하는 로직입니다. ResponseCookie build = ResponseCookie .from("accessToken", "gd") .path("/") .httpOnly(true) // 시간 .maxAge(JwtUtil.REFRESH_TOKEN_EXPIRE_TIME) .sameSite("Lax") .build(); ResponseEntity.ok().header("Set-Cookie", build.toString()) .body("ok"); 대충 쿠키를 생성해서 그 쿠키를 헤더에 담는 방식을 사용 중인데, 이렇게 로그인 완료 메서드에서 구현할 방법이 없고 헤더에 저장할 방법이 없어서 너무 막막합니다.. Controller에서 그냥 구현하면 ResponseEntity를 이용해서 헤더에 고정적으로 담을 수 있는데 로그인 성공 메서드에서 어떻게 해야 이렇게 똑같이 구현을 할 수 있을까요..ㅠㅠㅜ?

  • jwt
  • spring-security
  • spring
  • Spring Security
진짜 잘하고싶다 댓글 1 좋아요 0 조회수 456

안녕하세요 강사님 질문이 있습니다.

미해결

스프링부트 시큐리티 & JWT 강의

loadUserByUsername 메서드를 구현하지 않아도 로그인 기능, 권한 넘겨주기 다 가능할 거 같은데 이 메서드가 꼭 필요한 이유가 있나요? doFilter를 안 탄다고 말씀해주셨는데 전 JWT를 쿠키에 저장하는데, 쿠키의 값이 없을 때 doFIlter를 그냥 빠져나가는 식으로 구현했습니다. successfulAuthentication이나, 권한을 UsernamePasswordAuthenticationToken authentication // = new UsernamePasswordAuthenticationToken(userId, null, List.of(new SimpleGrantedAuthority("ROLE_USER"))); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authentication); 이렇게 넣을 수 있던데 이러한 방식은 뭐가 잘못된 걸까요? 문제가 생기나요?

  • spring-security
  • Spring Security
  • spring
  • jwt
진짜 잘하고싶다 댓글 1 좋아요 0 조회수 423

새로고침 한번에 클러스터 2개 종료

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

안녕하세요? setTimeout 대신 setImmediate를 적용해 요청이 발생하는 즉시 워커가 종료되게 해보았는데요, 이 경우엔 워커가 한번에 두개씩 종료됩니다. DevTool - network 창에 보이는 요청은 새로고침 1회당 GET 1회씩인데 왜 이러는지 궁금합니다! const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`마스터 프로세스 아이디 : ${process.pid}`); // CPU 갯수만큼 워커를 생산 for (let i=0; i < numCPUs; i++ ){ cluster.fork(); } //워커가 종료되었을 때 cluster.on('exit', (worker, code, signal) => { console.log(`${worker.process.pid}번 워커가 종료되었습니다.`); console.log('code', code, `signal`, signal); }); } else { // 워커들이 포트에서 대기 http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'}); res.write('<h1>Hello Node!'); res.end('<p>Hello Cluster!</p>'); setImmediate(()=> { process.exit(1); }); }).listen(8086); console.log(`${process.pid}번 워커 실행`); };

  • node.js
  • Socket.io
  • nodejs
  • mysql
  • express
  • mongodb
  • socket.io
  • typescript
  • jwt
Donggun Jang 댓글 2 좋아요 0 조회수 465

비동기 방식에서의 에러처리

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

안녕하세요! 어제 유투브에서도 질문드렸었는데 잘 이해가 가지 않아 다시 질문드립니다. 184p server1-1.js const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.write('<h1>Hello Node!</h1>'); res.end('<p>Hello Server!</p>'); }); server.listen(8080); server.on('listening', () => { console.log('8080번 포트에서 서버 대기 중입니다!'); }); server.on('error', (error) => { console.error(error); }); 어제 이 부분 에러처리를 try/catch로 하면 안되는건지 질문드렸었는데 server함수가 비동기로 진행되는거라 try/catch 적용하면 안된다고 답변받았었습니다. 186p server2.js const http = require('http'); const fs = require('fs').promises; http.createServer(async (req, res) => { try { const data = await fs.readFile('./server2.html'); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(data); } catch (err) { console.error(err); res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end(err.message); } }) .listen(8081, () => { console.log('8081번 포트에서 서버 대기 중입니다!'); }); 그런데 바로 뒤에서 async를 사용하여 비동기임이 확실한데도 try/catch로 에러처리를 하신 부분이 나와서 잘 이해가 안갑니다.. 뒷부분에서는 왜 try/catch를 적용해도 되는건지 궁금합니다!

  • node.js
  • jwt
  • Socket.io
  • mongodb
  • mysql
  • express
  • socket.io
  • nodejs
  • typescript
Donggun Jang 댓글 1 좋아요 0 조회수 418

마지막 강의 질문드립니다.

미해결

스프링부트 시큐리티 & JWT 강의

@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // 안 지우면 응답을 한번하고 아래서 두번하게 됨 오류가 됨 // super.doFilterInternal(request, response, chain); System.out.println("인증이나 권한이 필요한 주소 요청이 됨 "); String jwtHeader = request.getHeader("Authorization"); System.out.println("JWT HEADER :: {} " + jwtHeader); // JWT 토큰을 검증해서 정상적인 사용자인지 확인하기 if (jwtHeader == null || !jwtHeader.startsWith("Bearer")) { chain.doFilter(request, response); // 밑에 진행이 안되게 return; } String token = request.getHeader("Authorization").replace("Bearer ", ""); String username = JWT.require(Algorithm.HMAC512("cos")).build().verify(token).getClaim("username").asString(); // 서명이 정상적으로 됨 if (username != null) { User userEntity = userRepository.findByUsername(username); PrincipalDetails principalDetails = new PrincipalDetails(userEntity); // 임의의 authentication 만들기 username 이 null 이 아니라는게 인증이 된거임 // jwt 토큰 서명을 통해서 서명이 정상이면 Authentication 객체를 만들어준다 Authentication authentication = new UsernamePasswordAuthenticationToken(principalDetails, null, principalDetails.getAuthorities()); // 시큐리티 저장할 수 있는 세션 공간 //강제로 시큐리티의 세션에 접근하여 Authentication 객체를 저장 SecurityContextHolder.getContext().setAuthentication(authentication); } chain.doFilter(request, response); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable(); // 내 서버는 STATELESS http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .addFilterBefore(new JwtFilter(), SecurityContextHolderFilter.class) .addFilter(corsFilter) // CrossOrigin(인증X) 시큐리티필터에 등록인증(O) .addFilter(new JwtAuthenticationFilter(authenticationManager())) .addFilter(new JwtAuthorizationFilter(authenticationManager(), userRepository)) // CrossOrigin 정책 안쓰고 모든 요청 허용 .formLogin().disable() // 폼로그인 사용 안함 .httpBasic().disable() // http 로그인 방식 안쓰겠다 .authorizeHttpRequests(auth -> auth.requestMatchers("/api/v1/user/**").hasAnyRole("ROLE_USER", "ROLE_MANAGER", "ROLE_ADMIN") .requestMatchers("/api/v1/manager/**").hasAnyRole("ROLE_MANAGER", "ROLE_ADMIN") .requestMatchers("/api/v1/admin/**").hasRole("ROLE_ADMIN") .anyRequest().permitAll() ); return http.build(); } 마지막 강의 실습을 하는데요 디버깅 하면 유저 정보 정보 및 권한이 잘 조회되고 있지만 403 에러가 발생하고 있습니다. SecuriyConfig에는 deprecated 를 이유로 antMatchers가 아닌 저렇게 권한설정을 해주었는데요 잘못된 부분이 있는지 문의드립니다.

  • spring-security
  • jwt
  • Spring Security
  • spring
yoii 댓글 1 좋아요 0 조회수 635

라우트 분리 및 템플릿 엔진 사용법 강의

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

안녕하세요. 이전 강의와 강의 교안과는 다르게, 개정3판 강의에서는 라우트분리 및 템플릿엔진 사용법과 관련된 강의가 빠져있더라고요. 혹시 해당 강의들에 대해서 이번 개정판에서는 더 이상 학습하지 않아도 괜찮기 때문에 강의 내용에서 빠진 것 일까요? 매번 좋은 강의로 감사합니다.

  • node.js
  • jwt
  • express
  • typescript
  • nodejs
  • socket.io
  • mysql
  • mongodb
  • Socket.io
김승현 댓글 1 좋아요 1 조회수 353

async await 관련 질문입니다.

미해결

따라하며 배우는 NestJS

좋은 강의 영상 감사합니다. controller에서 service함수를 이용할때에는 async await 를 안써줘도 괜찮나요? 괜찮은것 같은데 혹시 그 이유는 무엇일까요..?

  • postgresql
  • nestjs
  • NestJS
  • typeorm
  • TypeORM
  • jwt
김민정 댓글 0 좋아요 3 조회수 480

AWS에서 MongoDB 설치

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

안녕하세요. 15장을 듣다가 궁금해서 Node와 관련이 없는 질문을 드립니다. MySQL은 RDS를 쓴다고 하셨는데 MongoDB를 EC2에서 분리하여서 설치하는 서비스는 무엇인가요? 감사합니다.

  • node.js
  • jwt
  • mysql
  • mongodb
  • express
  • Socket.io
  • socket.io
  • typescript
  • nodejs
gcpok 댓글 1 좋아요 0 조회수 652

BCrypt 암호화하는 과정이 궁금합니다.

미해결

Spring Boot JWT Tutorial

에러 안나고 결과도 잘 나오는데 LoginDto에 password가 어떻게 user 테이블에 있는 암호화된 비밀번호랑 비교돼서 동일한 결과값으로 판단돼서 토큰이 나오는지 궁금합니다. 제가 아직 부족해서인지 따라가면서 봐도 입력받은 password로 암호화하는 작업이 안보여서요

  • jwt
  • spring-boot
  • bcrypt
shi8295 댓글 0 좋아요 0 조회수 577

강의자료 다운로드 관련

미해결

따라하며 배우는 NestJS

안녕하세요! 강의 잘 듣고 있는 수강생입니다. 강의자료 다운 받으면 pdf, xml 모두 폴더가 비어 있습니다. (DS_store 파일만 있어서요..) 혹시 제가 모르는 부분이 있으면 알려주시면 감사하겠습니다!

  • postgresql
  • jwt
  • nestjs
  • NestJS
  • typeorm
  • TypeORM
pluler 댓글 1 좋아요 0 조회수 594

sql 에러

해결됨

Spring Boot JWT Tutorial

@Entity @Table(name = "users") @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class User { @JsonIgnore @Id @Column(name = "userId") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; @Column(name="userName", length = 50, unique = true) private String userName; @JsonIgnore @Column(name = "userPw", length = 100) private String password; @Column(name = "nickName", length = 50) private String nickName; @JsonIgnore @Column(name = "activated") private boolean activated; // @ManyToMany와 @JoinTable은 User객체와 권한객체의 다대다 관계를 // 일대다, 다대일 관계의 조인 테이블로 정했다는 뜻입니다. @ManyToMany @JoinTable( name = "user_authority", joinColumns = {@JoinColumn(name = "userId", referencedColumnName = "userId")}, inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "authority_name")}) private Set<Authority> authorities; package com.example.jwt_security.entity; import lombok.*; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "authority") @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class Authority { @Id @Column(name="authority_name", length = 50) private String authorityName; } Hibernate: drop table if exists authority CASCADE Hibernate: drop table if exists user_authority CASCADE Hibernate: drop table if exists users CASCADE Hibernate: create table authority ( authority_name varchar(50) not null, primary key (authority_name) ) Hibernate: create table user_authority ( user_id bigint not null, authority_name varchar(50) not null, primary key (user_id, authority_name) ) Hibernate: create table users ( user_id bigint generated by default as identity, activated boolean, nick_name varchar(50), user_pw varchar(100), user_name varchar(50), primary key (user_id) ) Hibernate: alter table users add constraint UK_k8d0f2n7n88w1a16yhua64onx unique (user_name) Hibernate: alter table user_authority add constraint FK6ktglpl5mjosa283rvken2py5 foreign key (authority_name) references authority Hibernate: alter table user_authority add constraint FKhi46vu7680y1hwvmnnuh4cybx foreign key (user_id) references users insert into users (userName, userPw, nickName, activated) values ('admin', '$2a$08$lDnHPz7eUkSi6ao14Twuau08mzhWrL4kyZGGU5xfiGALO/Vxd5DOi', 'admin', 1); insert into users (userName, userPw, nickName, activated) values ('user', '$2a$08$UkVvwpULis18S19S5pZFn.YHPZt3oaqHZnDwqbCW9pft6uFtkXKDC', 'user', 1); insert into authority (authority_name) values ('ROLE_USER'); insert into authority (authority_name) values ('ROLE_ADMIN'); insert into user_authority (user_id, authority_name) values (1, 'ROLE_USER'); insert into user_authority (user_id, authority_name) values (1, 'ROLE_ADMIN'); insert into user_authority (user_id, authority_name) values (2, 'ROLE_USER'); 여기서 into 뒤에가 에러가 생기네요 테이블까지는 제대로 생성됐는데 왜그러는지 모르겠어요

  • spring-boot
  • jwt
유요한 댓글 2 좋아요 0 조회수 1217

만약 존재하지 않는 ID가 들어올 경우는 어떻게 하는게 좋을까요?

미해결

스프링부트 시큐리티 & JWT 강의

강사님 안녕하세요. 강의 늘 잘 보고 있습니다. 25강 내용에서, 올바른 id일 경우 password 일치 여부에 따라 404 혹은 401 에러를 응답하는 것은 확인했습니다. 헌데 id 자체가 잘못되었을 경우 서버 에러(500)가 발생하더라구요. 잘못된 ID 입력에 대한 처리를 어떻게 하는게 좋을 지 궁금합니다. Service 계층(loadUserByUsername)에서 한번 검사를 한 후, 통과되었을 시 UserDetails을 return하는 식으로 구현하나요? 이 경우, loadUserByUsername의 return값은 어떤 것이 권장되는지 궁금합니다.

  • spring-security
  • Spring Security
  • spring
  • jwt
최창수 댓글 1 좋아요 1 조회수 643

패스워드 검증은 어디서 이루어지는건가요?

미해결

스프링부트 시큐리티 & JWT 강의

회원가입은 BCryptPasswordEncoder를 통해 패스워드를 암호화를 했었늗데요 @PostMapping("/joinProc") public String joinPorc(User user) { String rawPassword = user.getPassword(); String encPassword = bCryptPasswordEncoder.encode(rawPassword); user.setPassword(encPassword); userRepository.save(user); return "redirect:/login"; } 로그인할 떄 에는 따로 패스워드를 따로 검증하지 않고 username만 확인하더라구요 @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User userEntity = userRepository.findByUsername(username); if(userEntity != null){ return new PrincipalDetails(userEntity); } return null; } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } 어느 부분에서 자동으로 BCryptPasswordEncoder를 통해 matches 하고 검증하는건가요??

  • spring
  • spring-security
  • Spring Security
  • jwt
김태영 댓글 1 좋아요 0 조회수 745

대운, 세운에 대한 의미

미해결

지금 당장 NodeJS 백엔드 개발 [사주 만세력]

/members/:memberId/fortune/:bigNum?/:smallNum? 안녕하세요, 위 api에 대해 아직 이해가 안되서 여쭤봅니다. bigNum이 대운 smalNum은 세운을 뜻하는것 같은데 대운 1~10, 세운 1~10을 선택하면 위 param에 넣어진다는 것은 맞을까요? /members/:memberId/fortune/1/2 이런식으로요! 그런데 대운, 세운을 선택한다는게 무슨뜻인가요? 예컨대 대운 1을 택한다는것과 세운 3을 선택한다면 뭘 선택했다는건지 이해가 안가서요! 아마 제가 프론트 학습(만세력 앱 관련)을 하기전에 서버부터 해서 그런거 같은데 이 의미에 대해 설명해주시면 감사하겠습니다

  • node.js
  • jwt
  • nodejs
댓글 1 좋아요 0 조회수 1041

VueJs(프로트엔드) 오류

미해결

지금 당장 NodeJS 백엔드 개발 [사주 만세력]

PS C:\Users\jagit\SSYW\saju-frontend-vuejs-master> npm install npm WARN config global --global , --local are deprecated. Use --location=global instead. npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vuetify-loader@1.9.2 npm ERR! Found: vue@2.6.11 npm ERR! node_modules/vue npm ERR! vue@"2.6.11" from the root project npm ERR! peerOptional vue@"^2 || ^3.0.0-0" from @vue/babel-preset-app@4.5.17 npm ERR! node_modules/@vue/babel-preset-app npm ERR! @vue/babel-preset-app@"^4.5.17" from @vue/cli-plugin-babel@4.5.17 npm ERR! node_modules/@vue/cli-plugin-babel npm ERR! dev @vue/cli-plugin-babel@"~4.5.15" from the root project npm ERR! 3 more (vue-axios, vuetify, vuex) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer vue@"^2.7.2" from vuetify-loader@1.9.2 npm ERR! node_modules/vuetify-loader npm ERR! dev vuetify-loader@"^1.7.0" from the root project npm ERR! npm ERR! Conflicting peer dependency: vue@2.7.14 npm ERR! node_modules/vue npm ERR! peer vue@"^2.7.2" from vuetify-loader@1.9.2 npm ERR! node_modules/vuetify-loader npm ERR! dev vuetify-loader@"^1.7.0" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! See C:\Users\jagit\AppData\Local\npm-cache\eresolve-report.txt for a full report. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\jagit\AppData\Local\npm-cache\_logs\2023-01-28T07_03_01_187Z-debug-0.log PS C:\Users\jagit\SSYW\saju-frontend-vuejs-master> npm run serve npm WARN config global --global , --local are deprecated. Use --location=global instead. > saju-frontend-vuejs@0.1.0 serve > vue-cli-service serve 'vue-cli-service'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. PS C:\Users\jagit\SSYW\saju-frontend-vuejs-master> 오류납니다. 도와주세요!

  • node.js
  • nodejs
  • jwt
병정화李酉申 댓글 1 좋아요 0 조회수 1129

postman 사용 중 애러

미해결

지금 당장 NodeJS 백엔드 개발 [사주 만세력]

어찌해야 할지 모르겠네요. help me

  • node.js
  • nodejs
  • jwt
병정화李酉申 댓글 1 좋아요 0 조회수 412

뒷 부분 공부하고 싶습니다!

미해결

따라하며 배우는 NestJS

강의 뒷 부분이 너무 궁금합니다! 다른 비슷한 질문에 올라온 답변의 url은 다른 사람은 못 보게 돼 있는 것 같습니다.. 자료를 따로 받을 순 없는건가요??

  • postgresql
  • jwt
  • nestjs
  • NestJS
  • typeorm
  • TypeORM
nodemon 댓글 1 좋아요 0 조회수 759

update를 repository로 빼서 작성했는데 오류가 나옵니다

미해결

따라하며 배우는 NestJS

boards.service.ts 코드입니다. import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { BoardStatus } from './board-status.enum'; import { Board } from './board.entity'; import { BoardRepository } from './board.repository'; import { CreateBoardDto } from './dto/create-board.dto'; @Injectable() export class BoardsService { constructor( @InjectRepository(Board) private boardRepository: BoardRepository, ) {} createBoard(createBoardDto: CreateBoardDto): Promise<Board> { return this.boardRepository.createBoard(createBoardDto); } async getBoardById(id: number): Promise<Board> { console.log(id, 'ididid'); return this.boardRepository.getBoardById(id); } async deleteBoard(id: number): Promise<void> { const result = await this.boardRepository.delete(id); if (result.affected == 0) { throw new NotFoundException(`Can't find Board with id ${id}`); } } async updateBoardStatus(id: number, status: BoardStatus): Promise<Board> { const board = await this.getBoardById(id); board.status = status; await this.boardRepository.save(board); return board; } } board.repository.ts 코드입니다 import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { BoardStatus } from './board-status.enum'; import { Board } from './board.entity'; import { BoardRepository } from './board.repository'; import { CreateBoardDto } from './dto/create-board.dto'; @Injectable() export class BoardsService { constructor( @InjectRepository(Board) private boardRepository: BoardRepository, ) {} createBoard(createBoardDto: CreateBoardDto): Promise<Board> { return this.boardRepository.createBoard(createBoardDto); } async getBoardById(id: number): Promise<Board> { console.log(id, 'ididid'); return this.boardRepository.getBoardById(id); } async deleteBoard(id: number): Promise<void> { const result = await this.boardRepository.delete(id); if (result.affected == 0) { throw new NotFoundException(`Can't find Board with id ${id}`); } } async updateBoardStatus(id: number, status: BoardStatus): Promise<Board> { const board = await this.getBoardById(id); board.status = status; await this.boardRepository.save(board); return board; } } [Nest] 12296 - 2023. 01. 26. 오후 4:25:43 ERROR [ExceptionsHandler] this.boardRepository.getBoardById is not a function TypeError: this.boardRepository.getBoardById is not a function at BoardsService.getBoardById (C:\Users\lgh38\Desktop\GH\nest-board-app\src\boards\boards.service.ts:22:33) at BoardsService.updateBoardStatus (C:\Users\lgh38\Desktop\GH\nest-board-app\src\boards\boards.service.ts:33:30) at BoardsController.updateBoardStatus (C:\Users\lgh38\Desktop\GH\nest-board-app\src\boards\boards.controller.ts:44:31) 오류 내용은 위와 같습니다. 자세히 보면 this.boardRepository.getBoardById is not a function이라고 나오는데 제가 생각 했을 땐 처음 service의 updateBoardStatus 함수에서 getBoardById 함수로 넘겨주고 또 getBoardById 함수가 repository 안에 있는 getBoardById 함수에게 값을 넘겨서 두 번 리턴 받아서 해결 될 줄 알았는데 에러가 나오더라구요.. 오히려 분리를 안 시켰을 땐 오류가 안 나옵니다 무슨 이유일까요..?

  • jwt
  • nestjs
  • TypeORM
  • NestJS
  • typeorm
  • postgresql
lgh3806 댓글 0 좋아요 0 조회수 581

제로초스쿨 커뮤니티 슬랙에 들어갈수없습니다....!

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

안녕하세요, 제로초 스쿨 커뮤니티 에 들어갈 수 없는데..... 이제 슬랙을 운영하시지 않으시는건가요 ??

  • node.js
  • express
  • mysql
  • mongodb
  • typescript
  • Socket.io
  • socket.io
  • nodejs
  • jwt
스크루바 댓글 2 좋아요 0 조회수 738

인기 태그

인프런 TOP Writers

주간 인기글