NestJS: Neden Kullanılmalı ve Nasıl 🤔?

Atamyrat Abdyrahmanov
Kodcular
Published in
3 min readAug 16, 2020

Selam 👋🏻, bu yazımda Node.js frameworklarından biri olan NestJS’in ne olduğunu, nasıl ortaya çıktığını ve nasıl kullanmamız gerektiğini inceleyip beraber öğreniyor olacağız. Keyifli okumalar 🙂

NestJS

JetBrains şirketinin 2017 senesinde başlattığı araştırmalarına baktığımızda, günümüze kadar yapılan 4 senelik araştırmalarının tamamında da en çok tercih edilen programlama dillerinin başında JavaScript’in geldiğini görebiliyoruz. En çok tercih edilen olmakla birlikte, kullanımının her geçen sene artış gösterdiğini de görebiliyoruz.

Programming Language Usage

JavaScript’in popülaritesi bu kadar artarken, kullanımının kolaylaştırılması adına her geçen gün yeni framework’lar geliştirilerek kullanımı daha da yaygınlaşmaktadır. Bu frameworklar içerisinden frontend tarafında Angular, React, Vue ve Svelte’dan, backend tarafında ise Express, Koa, hapi ve NestJS’den bahsetmek mümkün. Önceki yazımızda Express, Koa, hapi karşılaştırmıştık, bugün de NestJS’i inceleyelim.

NestJS nedir 🤔

Kamil Myśliwiec tarafından server-side uygulamalarının geliştirilmesinin kolaylaştırmak amacıyla geliştirilmiş bir framework’dür. Bugün itibarıyle, Github’da +29,000 star’ı ve haftalık yaklaşık 315,000 npm indirme oranı bulunmaktadır.

NestJS, aslında, Express ve Node.js’i kendi içerisinde default olarak barındıran bir katman diyebiliriz. Framework progressive JavaScript kullanmakta olup, Typescript’i desteklemekle birlikte üç önemli ilkeyi birleştirmektedir:

  • OOP - Nesne Yönelimli Programlama,
  • FP - Fonksiyonel Programlama,
  • FRP - Fonksiyonel reaktif programlama.

NestJS uygulama geliştirme sürecinde oluşabilecek mimari açıdan önemli sorunlara etkili çözümler getirmeyi amaçlamaktadır. NestJS topluluğu, Node’un kendi içerisinde kütüphane, framework ve araç-gereçlere zengin olmasına rağmen, hiçbirisinin bu soruna çözüm getirmediğini öne sürmektedir.

NestJS, developerler için test edilebilirliği yüksek, ölçeklenebilir, loosely-coupled ve sürdürülebilir bir yapıya sahip uygulamalar geliştirebilecekleri bir mimari sağlamaktadır.

NestJS: şahane bir CLI artı mükemmel bir mimari 🔥

Ilk olarak, NestJS’in sizin tercih edip etmeyeceğinizi konusunda herhangi bir tereddütünüz olması durumunda Nest CLI’dan faydalanıp ilk denemenizi gerçekleştirebilirsiniz.

CLI, Nest uygulamalanızın kurulumunda, geliştirilmesinde ve sürdürülmesinde yardımcı olmaktadır. Örneğin, projenizin yapılandırmasına, development mode’da çalıştırmanıza ve production’a geçerken build/bundle etmenize kolaylıklar sağlamaktadır 💁🏽. Ek olarak, projenizin mimari kalıplarını best-practice’leri takip ederek iyi-yapılandırılmış bir şekilde geliştirmenizi sağlamaktadır.

Yeni başlayanlar için yeni proje oluşturduklarında Nest CLI kullanımı önemle tavsiye edilmektedir:

$ npm i -g @nestjs/cli
$ nest new project-name

Alternatif olarak, projenizi Typescript starter yardımıyla kurulumu için:

$ git clone https://github.com/nestjs/typescript-starter.git project-name
$ cd project-name
$ npm install

Projenizin yapısı hemen hemen alttaki gibi görünecektir:

1 .
2 ├── src
3 │ ├── app.controller.spec.ts
4 │ ├── app.controller.ts
5 │ ├── app.module.ts
6 │ ├── app.service.ts
7 │ └── main.ts
8 ├── test
9 │ ├── app.e2e-spec.ts
10 │ └── jest-e2e.json
11 ├── README.md
12 ├── nest-cli.json
13 ├── tslint.json
14 ├── tsconfig.json
15 ├── tsconfig.build.json
16 ├── package.json
17 └── yarn.lock

Dökümantasyonda bu yapının, Angular’ın yapısına çok benzer olduğunu ve Angular deneyimi olanların bu yapının ne kadar elverişli olduğuna dair öngörüşlerinin olacağı ifade edilmektedir.

Son olarak, Nest CLI uygulamanıza yeni controller, service ve modülleri kolay bir şekilde eklemenize yardımcı olmaktadır.

Decorator’lar 🌱

Bildiğimiz gibi, NestJS’in Typescript’i temel alarak geliştirilmiş bir framework’dür. Dolayısıyla, framework’un önemli özelliklerinin büyük çoğunluğu ES2016 decarator’ları kullanılarak oluşturulmuştur.

ES2016 decorator’ı hedefi,herhangi bir ismi ve özellik tanımlayıcıyısını argüman olarak alabilen, fonksiyon döndüren (return) bir ibaredir. Uygulamak için, decorator’un önüne @ karakterini eklemeniz ve bu işlemi decorate etmeye çalıştığınız şeyin üstüne yerleştirmeniz yeterli olacaktır. Decorator’lar class, metod veya özellik için tanımlanabilmektedirler.

Decorator’lar NestJS’in her yerinde kullanılmaktadır. Örneğin, module, controller veya service olduğunu işaretlemek için sırasıyla, @Module(), @Controllor ve @Injectable kullanılmaktadır. Herhangi bir endpoint’in HTTP metod’unu belirtmek için ise @Get(), @Post(), @Post(), @Put().

Elbette, kendi istediğimiz decarotar’ı oluşturmamız da mümkün, örneğin:

user.decorator.tsimport { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const User = createParamDecorator(
(data: string, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
const user = request.user;

return data ? user && user[data] : user;
},
);

@User() decorator’u controller içerisinde kullanırken istediğimiz özelliğe erişmek için:

@Get()
async findOne(@User('firstName') firstName: string) {
console.log(`Hello ${firstName}`);
}

Sonuç

Bu yazımda, NestJS’in Node’un diğer framework’larından ayrıldığı önemli noktalarını inceledik ve basit bir şekilde kurulumunu yapabileceğimiz noktaya kadar geldik. Bir sonraki yazımızda NestJS’i daha detaylı bir şekilde inceliyor olacağız.

--

--