A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.
This boilerplate is made to quickly prototype backend applications. It comes with database, logging, security, and authentication features out of the box.
Note: Docker Desktop comes free on both Mac and Windows, but it only works with Windows 10 Pro. A workaround is to get Docker Toolbox which will bypass the Windows 10 Pro prerequisite by executing in a VM.
Create a .env
file using the cp .env.example .env
command and replace the existing env variables with personal settings (MongoDB URL either srv
or localhost
)
Download dependencies using npm i
or yarn
Start the app in pre-production mode using npm run start
or npm run start:dev
for development (the app will be exposed on the port 9000; not to conflict with React, Angular, or Vue)
# creates and loads the docker container with required configuration
$ docker-compose up -d
By default, the application comes with a config module that can read in every environment variable from the .env
file.
APP_ENV - the application environment to execute as, either in development or production. Determines the type of logging options to utilize. Options: dev
or prod
.
APP_URL - the base URL for the application. Made mainly to showcase the power of ConfigService
and can be removed as it doesn't serve any other purpose
WEBTOKEN_SECRET_KEY - the secret key to encrypt/decrypt web tokens with. Make sure to generate a random alphanumeric string for this.
WEBTOKEN_EXPIRATION_TIME - the time in seconds indicating when the web token will expire; by default, it's 2400 seconds which is 40 mins.
DB_URL - the URL to the MongoDB collection
This boilerplate comes with Fastify out of the box as it offers performance benefits over Express. But this can be changed to use Express framework instead of Fastify.
For interchangeability:
Fastify:
// for fastify:
import {
FastifyAdapter,
NestFastifyApplication,
} from '@nestjs/platform-fastify';
import * as headers from 'fastify-helmet';
import * as fastifyRateLimiter from 'fastify-rate-limit';
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter({ logger: console }),
);
app.register(headers);
app.register(fastifyRateLimiter, {
max: 100,
timeWindow: '1 minute',
});
Express:
// for express:
import * as headers from 'helmet';
import * as rateLimiter from 'express-rate-limit';
const app = await NestFactory.create(AppModule, {
logger: console,
});
app.use(headers());
app.use(
rateLimiter({
windowMs: 60, // 1 minutes
max: 100, // limit each IP to 100 requests per windowMs
}),
);
Note: The boilerplate comes with production dependencies for both Express and Fastify to support moving between two. But this is going to leave it bloated especially when only one web framework is used at a time. Thus, it is recommended that when deploying to production, unused dependencies are purged.
If you choose to use Fastify, this command will purge all of the Express dependencies:
# removing Express dependencies
$ npm rm @nestjs/platform-express express-rate-limit helmet swagger-ui-express @types/express --save
If you choose to use Express, this command will purge all of the Fastify dependencies:
# removing Fastify dependencies
$ npm rm @nestjs/platform-fastify fastify-helmet fastify-rate-limit fastify-swagger --save
# unit tests
$ docker exec -it nest yarn test
# e2e tests
$ docker exec -it nest yarn test:e2e
# test coverage
$ docker exec -it nest yarn test:cov
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
The documentation for this boilerplate can be found on Github pages.
The docs can be generated on-demand, simply, by typing npm run typedocs
. This will produce a docs folder with the required front-end files and start hosting on localhost.
# generate docs for code
$ npm run typedocs
Out of the box, the web app comes with Swagger; an open api specification, that is used to describe RESTful APIs. Nest provides a dedicated module to work with it.
The configuration for Swagger can be found at this location.
Mongoose provides a straight-forward, schema-based solution to model your application data. It includes built-in type casting, validation, query building, business logic hooks and more, out of the box. Please view the documentation for further details.
The configuration for Mongoose can be found in the app module.
This boilerplate comes with an integrated Winston module for logging, the configurations for Winston can be found in the app module.
Nest has been able to grown because of sponsors and support from backers. If you'd like to join them, please read more here.
Nest is MIT licensed.
nest-angular A fullstack JavaScript project, using technologies from the modern stack, such as: NestJS - a JS backend framework providing architecture out of the box with a syntax similar to Angular A
NG-NEST NG-NEST 是一个开源的 Web 应用程序框架,基于 Angular 和 Nest ,主要用于研发企业级中后台产品。https://ngnest.com/ Angular 是一个应用设计框架与开发平台,用于创建高效、复杂、精致的单页面应用。 Nest 是构建高效、可扩展的 Node.js 服务器端应用程序的框架。 特性 客户端与服务端都使用 TypeScript 构建,提供完整
nest-cnode Description This is using the Nestjs imitation Cnode. Installation Currently runs with: nodejs v8.11.1 mongodb v3.4.1 redis v3.2.1 nestjs v6.11.11 With this sample, you can : Understand bas
NestJS Tutorial Repository Repository will be separated into server and client directory for NestJS backend and Angular frontend resepctively. Server repository Client repository Docker support Hook u
A progressive Node.js framework for building efficient and scalable server-side applications. Description The Nest CLI is a command-line interface tool that helps you to initialize, develop, and maint
nest-user-auth If this project helps you, please add a star! If you see an issue, please post it! This project uses NestJS, GraphQL, and MongoDB. This project implements user authentication. Adding ot