[Node.js] 실습1 - 개별 스크립트 작성

hahaha·2021년 10월 25일
0

Node.js

목록 보기
7/10

이번에 프로젝트가 아닌 개별 스크립트를 처음 작성하면서 익숙하지 않았던 부분들을 정리한다.

DB 연결하기

  • TypeORM 이용

1. Creating a new connection

import {createConnection} from "typeorm";

const connection = await createConnection({
  type: "mysql",
  host: "localhost(or 127.0.0.1)",
  port: 3306,
  username: "username",
  password: "password",
  database: "database",
});
  • 한 번 연결을 생성하면 app 내 어디서든 getConnection() 함수 사용 가능
  • multiple connections 생성도 가능
  • ormconfig.json을 통한 연결도 가능
  • ConnectionManager을 이용한 방법도 존재(추천하지 않음...)

2. Working with connection

  • getRepository(), getManager()를 이용해 레포지토리, 커넥션 매니저에 접근 가능
import {getManager, getRepository} from "typeorm";
import {User} from "../entity/User";

export class UserController {

    @Get("/users")
    getAll() {
        return getManager().find(User);
    }

    @Get("/users/:id")
    getAll(@Param("id") userId: number) {
        return getRepository(User).findOne(userId);
    }

}

TypeORM 관련 문서 - connection

Transactions 사용하기

1. Creating and using transactions

  • Connection or EntityManager 이용
  • 트랜잭션 내에서 실행되려면 반드시 콜백 안에서 실행되어야 함.
  • 항상 제공된 entity manager의 인스턴스를 사용해야 함.
    - global manager(from getManager or manager from connection) 사용 시, 문제가 생길 수 있음
  • All operations MUST be executed using the provided transactional entity manager.
import {getConnection, getManager} from "typeorm";

// 1. Connection 이용
await getConnection().transaction(async transactionalEntityManager => {
});

// 2. EntityManager 이용
await getManager().transaction(async transactionalEntityManager => {
});
  • Isolation Levels 설정 가능
  • Transaction decorators 사용 가능
  • QueryRunner 사용
    - startTransaction(), commitTransaction(), rollbackTransaction(), release()

TypeORM 관련 문서 - transaction

여러 모듈 활용하기

1. CommonJS 키워드 - require 이용

  • 동적으로 모듈을 불러올 수 있으나, 불필요한 코드까지 모두 불러오게 됨
  • 코드 어느 곳에서나 사용 가능
const { odd, even } = require ('typeorm');
// ...

// 방법 1: 하나의 객체만 내보낼 경우
module.exports = checkOddOrEven;

// 방법 2: 여러 개의 객체를 내보낼 경우 (exports 속성으로 할당)
exports.checkOddOrEven = { ... };
exports.checkOddOrEven2 = { ... };                       

2. ES6(ES2015) 키워드 - import 이용

  • Babel 같은 ES6 코드를 변환해주는 도구(transpile) 없이는 사용 불가
  • 코드 최상단에서만 사용 가능
  • node_modules에 설치된 모듈을 불러올 때에는, 경로 설정할 필요 없음
import { odd, even } from 'typeorm';
// ...

// 방법 1: 하나의 객체만 내보낼 경우
export default checkOddOrEven;

// 방법 2: 여러 개의 객체를 내보낼 경우
export { checkOddOrEven, checkOddOrEven2 };

- import ... from '...' 사용시, 오류가 나는 경우

  • 관련 경고 메세지
    (node:7897) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
    SyntaxError: Cannot use import statement outside a module
  • 원인
    - 노드 모듈을 포함하는 파일은 .mjs 이거나
    - pacakage.json 파일에 "type": "module" 표기되어야 함
profile
junior backend-developer 👶💻

0개의 댓글