DEV Community

Vishnu C Prasad
Vishnu C Prasad

Posted on • Originally published at vishnucprasad.Medium

Getting Started with NestJS: A Comprehensive Introduction

Getting Started with NestJS

In the rapidly evolving landscape of web development, staying on top of the latest technologies and frameworks is essential for creating efficient, scalable, and maintainable applications. One such framework that has gained significant traction in recent years is NestJS. NestJS is a powerful, versatile, and opinionated Node.js framework that combines elements from both traditional server-side frameworks and modern architectural patterns to create a platform that’s both familiar and innovative. In this article, we’ll take a comprehensive look at getting started with NestJS.

What is NestJS?

NestJS is a progressive web framework built on top of Node.js and TypeScript. It draws inspiration from popular frameworks and programming paradigms like Angular, Express, and Spring. This unique blend results in a framework that encourages the use of highly modular and structured code. The core principles of NestJS are:

  1. Modularity: NestJS promotes the use of modules to encapsulate different aspects of your application’s functionality. Each module can have its own controllers, services, and other components.

  2. Dependency Injection: NestJS relies heavily on dependency injection, which makes your codebase more modular and testable. This pattern allows you to easily manage and inject dependencies into your components.

  3. MVC Architecture: NestJS follows the Model-View-Controller (MVC) architectural pattern, making it easier to separate concerns and maintain a clear project structure.

  4. Decorators: Decorators are a core feature of NestJS. They enable you to easily define and configure various aspects of your application, such as route handlers, validation rules, and more.

  5. TypeScript: NestJS is built with TypeScript, a statically typed superset of JavaScript. TypeScript helps catch errors at compile time and provides better tooling for refactoring and maintaining codebases.

Setting Up Your NestJS Project

Getting started with NestJS is a straightforward process. Here are the steps to set up your first NestJS project:

Step 1: Install Dependencies

To create a new NestJS application, you need to have Node.js and npm (Node Package Manager) installed on your machine. Once you have them installed, open your terminal and run the following command to install the Nest CLI globally:

npm install -g @nestjs/cli
Enter fullscreen mode Exit fullscreen mode

Step 2: Create a New Project

With the Nest CLI installed, you can create a new project using the nest new command followed by your project name. For example, to create a project named "my-nest-app," run:

nest new my-nest-app
Enter fullscreen mode Exit fullscreen mode

This command will set up a new NestJS application in a folder named “my-nest-app.”

Step 3: Navigate to Your Project

Change your working directory to the newly created project folder:

cd my-nest-app
Enter fullscreen mode Exit fullscreen mode

Step 4: Run the Application

To start your NestJS application in development mode, use the following command:

npm run start:dev
Enter fullscreen mode Exit fullscreen mode

This will launch the application, and by default, it will be accessible at http://localhost:3000.

Exploring the Project Structure

Understanding the structure of a NestJS application is essential for maintaining a clean and organized codebase. Here’s an overview of the typical project structure created by the Nest CLI:

  • src: This directory contains the source code of your application.
  • main.ts: The entry point of your application. It initializes the NestJS application and starts the server.
  • app.module.ts: The root module of your application. Modules are an essential part of NestJS and provide a way to organize and encapsulate different parts of your code.
  • app.controller.ts: An example controller that handles incoming HTTP requests. Controllers receive requests, process them, and return responses.
  • app.service.ts: An example service that provides the business logic for the application. Services are responsible for handling data manipulation and other operations.
  • test: This directory is for your unit and integration tests.

Creating Controllers and Services

In NestJS, controllers and services work together to handle incoming requests and manage business logic. Let’s create a simple controller and service to see how this works:

Step 1: Generate a Controller

Use the following command to generate a new controller:

nest generate controller cats
Enter fullscreen mode Exit fullscreen mode

This will create a cats.controller.ts file in the src/cats directory.

Step 2: Define Routes and Handlers

Open the cats.controller.ts file and define routes using decorators:

import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Generate a Service

Generate a service to handle the business logic related to cats:

nest generate service cats
Enter fullscreen mode Exit fullscreen mode

This will create a cats.service.ts file in the src/cats directory.

Step 4: Implement Service Logic

Open the cats.service.ts file and implement a simple method:

import { Injectable } from '@nestjs/common';

@Injectable()
export class CatsService {
  findAll(): string {
    return 'This action returns all cats';
  }
}
Enter fullscreen mode Exit fullscreen mode

Step 5: Use the Service in the Controller

Inject the CatsService into the CatsController and use it to handle the logic:

import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Get()
  findAll(): string {
    return this.catsService.findAll();
  }
}
Enter fullscreen mode Exit fullscreen mode

Conclusion

NestJS provides a powerful and structured approach to building backend applications with Node.js. Its combination of modules, dependency injection, decorators, and TypeScript creates a development experience that is both efficient and maintainable. By following the steps outlined in this article, you’ve learned the basics of setting up a NestJS project, understanding the project structure, and creating controllers and services.

From here, you can explore more advanced topics like authentication, database integration, and real-time communication. With NestJS, you’re equipped to build robust and scalable applications that leverage the best of modern web development practices.

Top comments (0)