글

라벨이 Record인 게시물 표시

NestJS TypeORM의 Many to Many 구현 4- Join Table에 CASCADE적용하기(부모Record삭제시 자식 Record도 동시 삭제)

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 3- Join Table 구성 안녕하세요. 이번에는 'CASCADE'를 JoinTable에 적용해 보도록 하겠습니다.  사진1) userId 삭제할때 에러 위 SQL문에서 user 테이블의 id 2인 레코드를 지울려면 해당 JoinTable의 연관된 Record를 먼저 삭제를 해야 합니다. 이것을 삭제하고 진행을 할수 있지만 무척 번거로워 지겠죠.   좋은 방법중 하나는 user의 Record를 삭제하면 JoinTable의 연관된 Record도 자동으로 지워지는 것입니다. 그것이 CASCADE입니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => Us...

nest js -12 Turn Your Server url http to https2 : Apply to your code

이미지
 저번시간의 연장선으로 이번에는 nestjs에 https프로토콜을 적용하도록 하겠습니다.  위 화면은 key, cert.pem파일이 포함된 코드 입니다. NestJS에서 코딩하는 부분과 실행하는 부분이 다르기 때문에 src에 있는 .pem파일은 dist쪽으로 옮겨줘야 합니다.  $ mv cert.pem ../dist/ $mv key.pem ../dist/ // main.ts : /src/ import { NestFactory } from '@nestjs/core' ; import { AppModule } from './app.module' ; // NodeJS에 있는 모든 FileSystem을 // fs로 import 한다. import * as fs from 'fs' ; async function bootstrap () { // https옵션을 저장할 변수 // httpsOption을 생성한다. const httpsOptions = { // key, cert의 해당경로를 통해 read한다. // __dirname은 디렉토리 경로를 나타낸다. key : fs . readFileSync ( __dirname + '/key.pem' ), cert : fs . readFileSync ( __dirname + '/cert.pem' ), } const app = await NestFactory . create ( AppModule , { httpsOptions }); await app . listen ( 3000 ); } bootstrap (); 이제 main.ts부분의 코드를 추가하겠다. 일단 httpsOptions변수가 추가됬다. 이 변수안에는 key, cert 두개의 키값이 존재하는데 파일경로를 통해 읽은 문자열을 갖고있다. 파일경로는 cli로 옮긴 파일 경로를 작성하면 된다. ...

nest js -11 Turn Your Server url http to https1 : create certificate(key, cert.pem)

이미지
 안녕하세요. 기존의 NestJS는 http로 되어있습니다. 그대로 사용할수 있지만 보안이 중요한 웹사이트 같은경우는 위험할수 있습니다. 그래서 이번에는 지금까지 작성한 NestJS서버를 https프로토콜로 변경하도록 하겠습니다.  - 위 코드는 nest js - 1번 부터 10번까지 코딩한 자료를 바탕으로 만들었습니다. 자세한 코드는 블로그 글을 참고해 주시기 바랍니다. 일단 https프로토콜을 적용하기 위해서는 인증서가 필요합니다. 이번 글에서는 mkcert를 사용하여 인증서를 생성하도록 하겠습니다.  $ sudo apt install libnss3-tools $ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64 $ chmod +x mkcert $ sudo cp mkcert /usr/local/bin/ 이제 위와같이 cli작성이 마무리 되면 key, cert.pem파일을 생성할수 있다. 일단 인증발급기관을 추가합니다. 여기서는 mkcert입니다. $ mkcert -install 이제 해당 인증서를 생성합니다.  $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1 이제 해당 프로젝트 안에 key, cert.pem파일이 생긴것을 확인 할수 있습니다. 다음 글에서는 이걸로 실제 https프로토콜을 적용하고 사용을 하도록 하겠습니다.

nest js -10 Delete Particular member(parameter) in DB Record with TypeORM(DELETE)

이미지
// member.repository.ts : /src/members import { Member } from './member.entity' ; import { EntityRepository , Repository } from 'typeorm' ; // 내부에 에러가 발생시 사용. import { BadRequestException , InternalServerErrorException } from '@nestjs/common' ; // Member entity를 불러서 DB의 테이블 생성 @ EntityRepository ( Member ) export class MemberRepository extends Repository < Member > { // members.service.ts에 사용할 method생성 // Member를 생성한다. async createMember ( name : string , password : string , email : string , age : number , ) : Promise < Member > { // member record 생성 const member = new Member () // service에서 받은 정보를 record에 작성 member . name = name ; member . password = password ; member . email = email ; member . age = age ; try { // 작성한 record를 DB에 저장. await member . save (); } catch ( e...

nest js -9 Update Particular member(parameter) in DB Record with TypeORM(PUT)

이미지
이번 글에서는 존재하는 member의 정보를 수정하도록 하겠습니다. 이때도 memberId가 필요하고 params를 통해 받습니다. // member.repository.ts : /src/members import { Member } from './member.entity' ; import { EntityRepository , Repository } from 'typeorm' ; // 내부에 에러가 발생시 사용. import { InternalServerErrorException } from '@nestjs/common' ; // Member entity를 불러서 DB의 테이블 생성 @ EntityRepository ( Member ) export class MemberRepository extends Repository < Member > { // members.service.ts에 사용할 method생성 // Member를 생성한다. async createMember ( name : string , password : string , email : string , age : number , ) : Promise < Member > { // member record 생성 const member = new Member () // service에서 받은 정보를 record에 작성 member . name = name ; member . password = password ; member . email = email ; member . age = age ; try { // 작성한 record를 DB에 저장. await m...

nest js -8 List Particular member(parameter) in DB Record with TypeORM(GET)

이미지
  이번에는 특정 memberId를 이용하여 정보를 불러오겠다. // member.service.ts : /src/members import { Injectable } from "@nestjs/common" ; import { InjectRepository } from '@nestjs/typeorm' ; import { MemberRepository } from "./member.repository" ; import { Member } from "./member.entity" ; // controller에 method를 제공해 준다. @ Injectable () export class MembersService { constructor ( // DB를 사용하게 되서 더이상 members는 필요 없어졌다. @ InjectRepository ( MemberRepository ) private memberRepository : MemberRepository ) {} // DB구축전 테스트용 코드(DB설치후 삭제) //private members: Member_ver1[] = []; // DB에 있는 모든 member를 조회한다. async inquireAllMember (){ // find()은 쿼리문 SELECT * FROM members; // 이라고 보면 된다. return await this . memberRepository . find (); } // DB에 있는 모든 member를 조회한다. async inquireOneMember ( memberId : number ){ // find({id : memberId})은 쿼리문 // SE...

nest js -7 List DB Record with TypeORM(GET)

이미지
  이번에는 GET요청으로 모든 멤버의 정보를 받는 코드를 짜겠습니다. // member.service.ts : /src/members import { Injectable } from "@nestjs/common" ; import { InjectRepository } from '@nestjs/typeorm' ; import { MemberRepository } from "./member.repository" ; import { Member } from "./member.entity" ; // controller에 method를 제공해 준다. @ Injectable () export class MembersService { constructor ( // DB를 사용하게 되서 더이상 members는 필요 없어졌다. @ InjectRepository ( MemberRepository ) private memberRepository : MemberRepository ) {} // DB구축전 테스트용 코드(DB설치후 삭제) //private members: Member_ver1[] = []; // DB에 있는 모든 member를 조회한다. async inquireAllMember (){ // find()은 쿼리문 SELECT * FROM members; // 이라고 보면 된다. return await this . memberRepository . find (); } // Controller에서 회원정보 등록 요청시 // DB와 통신을 해야하기 때문에 async사용. async createMember ( name : string , password : string...