전체 글

Node.js/Nest.js

[Nest.js - TypeORM] EntityMetadataNotFoundError

Settings Node.js v18.14.0 @nestjs/cli v9.4.2 @nestjs/common v9.4.0 @nestjs/core v9.4.0 @nestjs/typeorm v9.0.1 typeorm v0.3.15 mysql2 v3.2.4 문제 TypeORM 의 entities 옵션을 다음과 같이 경로 기반 설정 entities: [__dirname + '/../**/*.entity{.ts,.js}'] + webpack 등을 이용하여 entity 를 정의해놓은 파일 또한 번들링. = 해당 파일을 찾지 못해 entity 정보를 불러오지 못하여 EntityMetadataNotFoundError 같은 오류가 발생. 해결 import 나 require 등을 통해 미리 entity 들을 load 해야..

Project

[Nest.js] nestjs-auth-http

Links Git Repository NPM Nest.js 문서에도 나와있는 @nestjs/axios 패키지를 사용하고자 하니, 다음과 같은 문제가 있었다. HttpService 가 RxJS 의 Observable 기반 ( axiosRef getter 가 있긴 함. ) Interceptors 등록 시 번거로움이 있음. 나는 observable 대신 promise interceptors 를 등록하기 편하게 토큰 기반 인증이 필요한 HTTP 통신 중, 토큰이 자동 (재)발급이 가능하도록 하고자 하여 만들어 보았다.

Node.js/Nest.js

[Nest.js - GraphQL] Object Type Scalar

Settings Node.js v18.14.0 @nestjs/graphql v10.2.0 object.scalar.ts import { CustomScalar, Scalar } from '@nestjs/graphql'; import { GraphQLError, Kind, ObjectValueNode, ValueNode } from 'graphql'; @Scalar('Object', () => Object) export class ObjectScalar implements CustomScalar { description = 'Arbitrary object'; parseObject = (ast: ObjectValueNode) => { const obj = {}; for (const field of ast.f..

Node.js/TypeScript

[TypeScript] axios file upload/download

Settings Node.js v18.14.0 axios v1.3.5 file.service.ts import { AxiosInstance, AxiosRequestConfig } from 'axios'; import { createReadStream, createWriteStream } from 'fs'; import { dirname, join as joinPath } from 'path'; import FormData from 'form-data'; // import { randomString } from 'YOUR_RANDOM_STRING_GENERATOR'; export class FileService { constructor(private readonly axios: AxiosInstance) ..

Node.js/Nest.js

[Nest.js - GraphQL] MappedType 한 번에 적용

Settings Node.js v18.14.0 @nestjs/graphql v10.2.0 Comment @nestjs/graphql 에서 Mapped Type을 지원해주지만, 입맛대로 바꾸려다보면 코드가 지저분해져서 한 번에 적용할 수 있도록 해보았다. PartialPickType (PartialType + PickType) import { Type } from '@nestjs/common'; import { PartialType, PickType } from '@nestjs/graphql'; import { ClassDecoratorFactory } from '@nestjs/graphql/dist/interfaces/class-decorator-factory.interface'; export funct..

Node.js/TypeScript

[TypeScript] mixin

comment - 저장용 global.d.ts type Constructor = new (...args: any[]) => T; type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; mixin.ts function applyMixin(derived: Constructor, target: Constructor) { const proto = Object.getPrototypeOf(target); Object.getOwnPropertyNames(proto).forEach((name) => { Reflect.defineProperty( derived.prototype, ..

BlockHead
BlockHead