We are getting started with NestJS. This document is a work in progress and it gets updated as we go.

We use Visual Studio Code, download and install it.

Open the console in VS Code with View|Integrated Terminal.

Now create a new folder for the project on the console and open it as VS Code project folder:

mkdir nestjs-backend
code -r nestjs-backend 

Install Node.js if you don't have it yet.

Check for npm version (currently 5.6.0), npm comes with Node.js.

npm -v 

If the version is older than 5 update it with

npm install -g npm 

Install TypeScript from https://www.typescriptlang.org/#download-links

The following call may fail for Mac OSX and Linux users, it's optional if you dont have admin rights. Leave it out. We will install TypeScript locally to the project later.

npm i -g typescript 

Create our npm project file package.json, in folder nestjs-backend call:

npm init  -y 

With -y nmp wont't ask four additional input and uses the default values for the project.

Open package.json and add in "scripts": { some more entries:

    "start": "node index.js",
    "prestart:prod": "tsc", 

Save the changes we made in package.json.

In the console we add dependencies to NestJS:

npm i -s @nestjs/common @nestjs/core @nestjs/microservices @nestjs/testing @nestjs/websockets reflect-metadata rxjs 

We install TypeScript and type support for node and express.

npm i --save-dev @types/node @types/express nodemon ts-node typescript 

To create the file tsconfig.json, in folder nestjs-backend call:

tsc --init 

Make sure that the latest TypeScript version is used. In Windows delete an old PATH entry.

For Mac OSX and Linux users, use the version installed local to our project:

./node_module/typscript/bin/tsc --init 

Open the generated file tsconfig.json and update it:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "allowJs": true,
    "outDir": "./dist"
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}
 

Create index.js in nestjs-backend

require('ts-node/register');
require('./src/main'); 

Create src folder in nestjs-backend

Create app.controller.ts in nestjs-backend/src

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

@Controller()
export class AppController {
    @Get()
    root(): string {
    return 'Hello World!';
  }
}
 

Create app.module.ts in nestjs-backend/src

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

@Module({
  imports: [],
  controllers: [AppController],
  components: [],
})
export class ApplicationModule {}
 

Create main.ts in nestjs-backend/src

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

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

We can start our NestJS app with:

npm start 

Open a browser and go to http://localhost:3000

Install Visual Studio Code plugin: REST Client https://marketplace.visualstudio.com/items?itemName=humao.rest-client

Create file rest-test.http

GET http://localhost:3000

###
POST http://localhost:3000/products
Content-Type: application/json

{"id":1,"name":"product1","description":"First Product" }
 

Now we can use Visual Studio Code as a client for our service.

The ### is a separator for two requests.

tslint

We don't use tslint for our 'Getting started with NestJS' project. You can skip this part.

npm i -g tslint 

create a basic configuration file tslint.json with:

tslint --init 

update tslint.json

    "rules": {
        "quotemark": [
            true,
            "single"
        ],
        "member-access": [
            false
        ],
        "ordered-imports": [
            false
        ],
        "interface-name": [
            false
        ],
        "no-empty-interface": false,
        "no-empty": false,
        "arrow-parens": false,
        "object-literal-sort-keys": false
    }
 

I have put the source code at GitHub https://github.com/ptea/nestjs-backend

To continue the next part: Add TypeORM to NestJS Project