본문 바로가기

NodeJS

javascript array에서 중복되는 객체 제거하기 중복 제거 하기 단순한 숫자나 문자의 중복 제거는 Set을 이용하면 간단하게 처리 할 수 있습니다. const list = ['1', '2', '3', '2', 1,2,3, 1,2,3]; // Set 을 이용한 방식 [...new Set(list)] // filter를 이용한 방식 list.filter((item, index) => list.indexOf(item) === index); // 결과 [ '1', '2', '3', 1, 2, 3 ] 하지만, 객체의 중복제거의 경우는 조금 다른 방식으로 처리 해야 합니다. # 중복 제거가 안됨 const list = [{a:1, b:2}, {a:2, b:1}, .. 더보기
nestjs에서 passport + SAML 로그인시 오류 발생 처리 SAML assertion expired [Nest] 32582 - 2021-06-25 15:24:29 [ExceptionsHandler] SAML assertion expired +40568ms Error: SAML assertion expired at SAML.checkTimestampsValidityError (/Users/lahuman/dev/oss-square/backend/node_modules/passport-saml/lib/passport-saml/saml.js:1047:24) at /Users/lahuman/dev/oss-square/backend/node_modules/passport-saml/lib/passport-saml/saml.js:988:37 at processTicksAndR.. 더보기
nestjs에서 jest를 이용한 End2End 테스트 케이스를 작성 nestjs에서 jest를 이용한 End2End 테스트 케이스를 작성하였습니다. src/user/user.controller.spec.ts 파일에 사용자 추가/수정/삭제/조회에 대한 테스트 케이스를 작성하였습니다. End2End 데이터 기준의 validate 테스트 로그인 Mock 객체 주입 테스트 repository Mock 객체 테스트 전체 테스트 케이스 실행은 다음의 명령어로 할 수 있습니다. node run test특정 테스트 케이스 실행은 다음 명령어로 할 수 있습니다. node node_modules/jest/bin/jest.js src/user/user.controller.spec.ts 테스트 케이스를 이용하면 코드의 오류를 빠르게 찾아낼 수 있습니다. 그 외에도 플로우차트 기반으로 테스트 .. 더보기
NestJS에서는 기본적으로 jest 기반의 테스트 케이스를 제공합니다. 오늘 설명은 Controller 기반의 테스트에서 다음 내용입니다. Repository 객체를 Mock으로 주입 Connection 객체를 Mock으로 주입 mockAuthGuard 객체를 Mock으로 주입하여 로그인 처리 첨부파일 업로드 Mock 객체 생성 자동으로 만들어진 테스트 케이스는 아래와 같습니다 import { Test, TestingModule } from '@nestjs/testing'; import { Controller } from './my.controller'; describe('Controller', () => { let controller: Controller; beforeEach(async () => { const module: Te.. 더보기
nodejs에서 middleware 처리 방법 기존 function에서 오류가 날 경우 봇으로 메시지 발송 기능을 구현 하려고 합니다. express에서는 middleware를 활용했었는데, 순수한 javascript에서는 어떻게 해야할지 검색을 해보니 Is there a way to add try-catch to every function in Javascript? 를 확인 할 수 있었습니다. var tcWrapper = function(f) { return function() { try { f.apply(this, arguments); } catch(e) { customErrorHandler(e) } } }위 예제의 문제는 결과 값 return 처리가 안되었다. async (비동기) 처리에서 오류 발생시 catch가 안됩니다. 이를 해결하기 위해.. 더보기
[개인프로젝트] Workplace Export Workplace Export 워크플레이스의 관리자 패널에서는 특정 Group의 게시글을 export를 제공하지 않습니다. 이 프로젝트는 Workplace의 특정 Group의 게시글을 다운 받는 기능을 제공합니다. 한번에 다운받을 게시글의 수는 .env에서 변경이 가능합니다. 너무 큰 숫자의 경우 Workplace 서버에서 오류가 발생할 수 있습니다. (권장: 100, 최대 : 500, 테스트에서는 1000도 가능하였으나, 오류가 간간히 발생했습니다.) workplace 게시글 + 댓글을 xlsx 형식으로 다운로드 합니다. Screen 그룹 정보 조회 그룹 ID를 기준으로 그룹 정보가 표기 1번째 이후 게시글 다운로드 시 게시글 다운로드 다음 으로 UI 변경 모든 게시글 다운로드 시 알림 표기 잘못된 그.. 더보기
[개인프로젝트]md5-lite md5-lite 프로젝트 바로가기 파일을 청크(Chunk) 사이즈 처리를 해서 성능 향상을 목적으로 만들어진 모듈입니다. 파일 크기가 200000byte(0.2MB) 이상일 경우 초기 100000byte (0.1MB)와 마지막 100000byte을 이용하여 md5 hash 처리 합니다. 그보다 크기가 작을 경우 전체 데이터의 전체를 md5 hash 처리 합니다. 사용법은 다음과 같습니다. Installation npm install md5-lite --save yarn add md5-lite bower install md5-lite --save Usage Javascript const {md5Lite} = require('md5-lite'); console.log(md5Lite('... 더보기
MSSQL POOL을 Express 환경에서 사용하기 MSSQL POOL을 Express 환경에서 사용하기 node-mssql의 예제를 참고로 다음과 같이 사용하고 있었습니다. const sql = require('mssql') // async/await style: const pool1 = new sql.ConnectionPool(config); const pool1Connect = pool1.connect(); pool1.on('error', err => { // ... error handler }) async function messageHandler() { await pool1Connect; // ensures that the pool has been created try { const request = pool1.req.. 더보기
NAVER CLOUD PLATFORM API를 Typescript 기반에서 사용하기 NAVER CLOUD PLATFORM API를 Typescript 기반에서 사용하기 회사의 메일 발송은 NAVER CLOUD PLATFORM API를 이용하고 있습니다. NAVER CLOUD PLATFORM API를 참조하면 인증키를 생성해서 API를 호출 해야 합니다. 자바를 사용할 경우 쉽게 만들수 있는데, javascript 버젼의 경우 CryptoJS v3.1.2를 사용하는 가이드를 주고 있습니다. 문제는 nodejs기반에선는 CryptoJS v3.1.2보다는 crypto-js를 많이 사용합니다. 다음 코드는 crypto-js를 사용해서 NAVER CLOUD PLATFORM API를 연동한 예제 입니다. 메일 발송 예제 import { HttpException, HttpStatus, Injecta.. 더보기
Nestjs tutorial Nestjs tutorial 1. 프로젝트 생성하기 nestjs cli 를 이용하면 쉽게 프로젝트를 생성 할수 있습니다. # nestjs cli 설치 $ npm i -g @nestjs/cli # 프로젝트 생성 $ nest new project-name2. OpenAPI 설정 다음 라이브러리를 설치합니다. $ npm install --save @nestjs/swagger swagger-ui-express 이후 main.ts에 SwaggerModule 설정을 합니다 # main.ts import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { NestExpressAppli.. 더보기