NestJS | Getting started – Part 1



NestJS (just Nest from here on out), is a Node framework meant to build server-side applications. Not only is it a framework, but it is also a platform to meet many backend application needs, like writing APIs, building microservices, or doing real-time communications through web sockets.

Nest is also heavily influenced by Angular, and you will immediately find its concepts familiar. The creators of Nest strived to make the learning curve as small as possible, while still taking advantage of many higher level concepts such as modules, controllers, and dependency injection.


Install NodeJS

Download NodeJS from here and install as described here.

For example, on macOS using Homebrew

brew install node

Or download the package

curl "${VERSION:-$(wget -qO- | sed -nE 's|.*>node-(.*)\.pkg</a>.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

Install NextJS

npm i -g @nestjs/cli

Create server App

Create new server App

nest new demo.server

Start server App

cd demo.server
npm run start:dev

Now open browser on http: localhost:3000

App Structure


import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);


import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

  imports: [],
  controllers: [AppController],
  providers: [AppService],
export class AppModule {}


import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

export class AppController {
  constructor(private readonly appService: AppService) {}

  getHello(): string {
    return this.appService.getHello();


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

export class AppService {
  getHello(): string {
    return 'Hello World!';

Add Functionality

Create service and controller

nest g service missions
nest g controller missions

Modify mission service

export class MissionsService {
  missions: Mission[] = [
    { id: 1, title: 'Rescue cat stuck in asteroid', reward: 500, active: true, },
    { id: 2, title: 'Escort Royal Fleet', reward: 5000, active: true, },
    { id: 3, title: 'Pirates attacking the station', reward: 2500, active: false, },

  async getMissions(): Promise<Mission[]> {
    return this.missions;

Modify mission controller

export class MissionsController {
  constructor(private missionsService: MissionsService) {}

  getMissions() {
    return this.missionsService.getMissions();

Open in browser: http://localhost:3000

Create Frontend App

Create new frontend App

ionic start demo.frontend sidemenu

Working with Database and TypeORM

Create / Sync database with schema

Add command to package.json

"scripts": {
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"
npm run typeorm schema:sync

TypeORM Commands

Synchronizes your entities with database schema. It runs schema update queries on all connections you have. To run update queries on a concrete connection use -c option.
Shows sql to be executed by schema:sync command. It shows sql log only for your default connection. To run update queries on a concrete connection use -c option.
Drops all tables in the database on your default connection. To drop table of a concrete connection's database use -c option.
Executes given SQL query on a default connection. Specify connection name to run query on a specific connection.
Generates a new entity.
Generates a new subscriber.
Creates a new migration file. [Aliase: migrations:create]
migration:generate  Generates a new migration file with sql needs to be executed to update schema. [Aliase: migrations:generate]
Runs all pending migrations. [Aliase: migrations:run]
Show all migrations and whether they have been run or not
Reverts last executed migration. [Aliase: migrations:revert]
Prints TypeORM version this project uses.
Clears all data stored in query runner cache.
Generates initial TypeORM project structure. If name specified then creates files inside directory called as name. If its not specified then creates files inside current directory.

Additional readings