nestjs
-
Nests.js GraphQL Resolver 설정 방법 (code-first)nestjs 2022. 5. 15. 14:40
계기 Golang -> Nest.js로 server Migration을 하는 상황에서 resolver를 작성하다가 문제가 생겼다. 각각의 상황에 마다 다르겠지만, 본인이 개발중인 서버에서 nested 된 data가 많고 또 nested 된 각각의 data들이 연관성이 있기 때문에 실제로 DB에 접근하는 Resolver는 하나지만 nested 된 data들을 다른 data의 상황에 맞게 변경해야할 필요가 있었다. 예를 들면, user가 어떤 작업을 하고 그 작업에는 startTIme과 endTime이 있다고 가정하자. 이는 user에 nested 되어 있는 data로 user에 대한 호출 한번만으로 모든 data를 가져올 수 있다. 즉, user.dosomething.startTime, user.dosom..
-
mongo-message-queue 구현하기nestjs 2022. 4. 23. 09:52
계기 서버를 개발하다 보니 특정 주기로 지속적으로 돌면서 요청을 처리하는 Cron Server가 필요했다. 이 요청은 동일한 node에서 오는 것이 아니기 때문에 특정 저장 공간을 공유해서 요청을 처리해야 했는데 이를 기존에는 mongodb-queue - npm (npmjs.com) 을 사용해서 mongodb의 collection하나를 queue로 사용했다. 하지만 mongodb version을 올림에 따라 더 이상 이 모듈을 사용할 수 없게 되어 개발하게 되었다. 개발 1. Schema 정의 const QueuePayload = mongoose.Schema( { type: { type: String, required: true }, //message type data: { type: Object, re..
-
Nestjs GraphQL 시작nestjs 2021. 8. 22. 21:06
nestjs cli를 install한다. npm i -g @nestjs/cli graphQL을 위한 install을 한다. npm i @nestjs/graphql graphql apollo-server-express@2.x.x Nest Project를 생성한다. nest new nest-runner-server 예시로 User 관리를 위한 resource를 generate한다. nest g resource 필요한 module을 install한다. npm i ts-morph @apollo/gateway npm run start로 동작을 확인한다. 이제 graphQL schema와 Resolver, service를 구현해야 한다.
-
nestjs 문서 따라하기 #5 (Controller-4)nestjs 2021. 5. 25. 00:39
Asynchronicity Javascript는 비동기적으로 동작하기 때문에 동기적 동작이 필요할 경우 async / await를 사용하여야 한다. Promise를 return하기 Observable return하기 Promise vs Observable Promise async 작업이 끝나거나 에러발생을 핸들링하는 단일 이벤트 핸들러이다. 이벤트가 무조건 실행된다. 즉시 실행된다. Observable stream같이 0~n개의 이벤트를 핸들링 할 수 있다. Promise와 달리 필요하지 않은 이벤트를 취소할 수 있다. subscribe시에만 실행한다. array와 비슷한 operator를 지원한다.(map, reduce, forEach) 참조 https://rxjs-dev.firebaseapp.com/..
-
nestjs 문서 따라하기 #4 (Controller-3)nestjs 2021. 5. 22. 16:13
Resources HTTP 메소드 사용하기 decorator ( @Get(), @Post(), @Put(), @Delete(), @Patch(), @Options(), @Head(), @All() ) 사용방법@All decorator의 경우 어떤 method로 요청이 와도 다 받는다. Route wildcards route 경로에 regex 처럼 사용할 수 있는 문자는 ?, +, *, () 이다. - , . 은 string 그 자체로 사용된다. 아래는 예시이다. Status Code @nestjs/common 패키지에서 import한 HttpCode decorator를 사용해서 status code를 변경할 수 있다. Headers 커스텀 응답헤더는 @Header() decorator로 사용할 수 있다...
-
nestjs 문서 따라하기 #3 (Controller-2)nestjs 2021. 5. 16. 10:45
Router Controller의 목적은 애플리케이션에 대한 특정 요청을 수신하는 것이다. Routing 메커니즘은 어떤 컨트롤러가 어떤 요청을 수신하는지 제어한다. controller가 받은 요청은 api에 따라 Controller의 method로 라우팅된다. 여기서 return 이 status도 없이 string만 전달하는게 이상하게 느껴질 수 있다. 기존 express를 사용할 때는 함수에서 인자로 req, res를 받은 뒤 res.status(400).json({err: ‘Incorrect id’});와 같이 status를 설정하고 json형식으로 응답을 전달해야 한다. 하지만 nest는 아래와 같다. 참조: Request Object nest에서 request Object를 쓰기 위해서는 @Re..
-
nestjs 문서 따라하기 #2 (Controller-1)nestjs 2021. 5. 6. 07:02
Controller란? 쉽게 말해서 Client Side에서의 요청을 받는 layer이다. (Route의 역할을 한다.) HTTP, GraphQL, NATS, ...etc 등의 interface를 통해 Client Side에서 요청이 오면 해당 요청을 받고 Client에게 response를 주는 Layer이다. Logic은 들어가지 않고 요청에 맞게 logic이 구현된 service를 호출해준다. (service는 다음 장에서 알아보겠다.) 여기서 Nestjs는 request와 연관된 controller를 연결시켜주는 역할을 하는 Decorator (클래스들을 요구되는 metadata와 연결해 주고 Nest에게 routing map을 가능하게 한다.)를 사용한다. 우리는 이 Controller Decor..
-
nestjs 문서 따라하기 #1 (First Step)nestjs 2021. 5. 6. 06:43
Nestjs는 "nest new $project_name" command를 이용하여 시작 시 자동으로 file들이 생성되고 아래와 같다. app.controller.ts 하나의 route가 있는 기본 controller app.controller.spec.ts controller unit test app.module.ts 이 app의 기본 모듈 app.service.ts 하나의 method를 갖는 service main.ts nestjs의 시작 file nestjs는 기본적으로 express를 기반으로 사용하는데 fastify로 변경할 수 있다. (이는 기본 문서를 다 한 후에 알아보도록 하겠다.) ※우리는 nodejs에서 req body로 json을 받기 위해 body-parser를 설정해야만 했다. ..