There are so many available web frameworks, and with the advent of Node.js, even more have been released. JavaScript frameworks go in and out of style very quickly as web technologies change and grow. Nest.js is a good starting point for many developers that are looking to use a modern web framework because it uses a language that is very similar to that of the most used language on the web to this day, JavaScript. Many developers were taught programming using languages such as Java or C/C++, which are both strict languages, so using JavaScript can be a little awkward and easy to make mistakes given the lack of type safety. Nest.js uses TypeScript, which is a happy medium. It is a language that provides the simplicity and power of JavaScript with the type safety of other languages you may be used to. The type safety in Nest.js is only available at compile time, because the Nest.js server is compiled to a Node.js Express server that runs JavaScript. This is still a major advantage, however, since it allows you to better design programs error free prior to runtime.
Node.js has a rich ecosystem of packages in NPM (Node Package Manager). With over 350,000 packages, it’s the world’s largest package registry. With Nest.js making use of Express, you have access to each and every one of these packages when developing Nest applications. Many even have type definitions for their packages that allow IDE’s to read the package and make suggestions/auto fill in code that may not be possible when crossing JavaScript code with TypeScript code. One of the largest benefits of Node.js is the huge repository of modules that are available to pull from instead of having to write your own. Nest.js includes some of these modules already as part of the Nest platform, like @nestjs/mongoose, which uses the NPM library mongoose. Prior to 2009, JavaScript was mainly a front-end language, but after the release of Node.js in 2009, it spurred the development of many JavaScript and TypeScript projects like: Angular, React, and Vue, among others. Angular was a heavy inspiration for the development of Nest.js because both use a Module/Component system that allows for reusability. If you are not familiar with Angular, it is a TypeScript-based front-end framework that can be used cross-platform to develop responsive web apps and native apps, and it functions a lot like Nest does. The two also pair very well together with Nest providing the ability to run a Universal server to serve pre-rendered Angular web pages to speed up website delivering times using Server-Side Rendering (SSR) mentioned above.
This book will reference a working Nest.js project that is hosted on GitHub at (https://github.com/backstopmedia/nest-book-example). Throughout the book, code snippets and chapters will reference parts of the code so that you can see a working example of what you are learning about. The example Git repository can be cloned within your command prompt.
git clone https://github.com/backstopmedia/nest-book-example.git
This will create a local copy of the project on your computer, which you can run locally by building the project with Docker:
docker-compose up
Once your Docker container is up and running on port localhost:3000, you will want to run the migration before doing anything else. To do this run:
docker ps
To get the ID of your running Docker container:
docker exec -it [ID] npm run migrate up
This will run the database migrations so that your Nest.js app can read and write to the database with the correct schema.
If you don’t want to use Docker, or cannot use Docker, you can build the project with your choice of package managers such as npm or yarn:
npm install
or
yarn
This installs the dependencies in your node_modules folder. Then run:
npm start:dev
Or the following to start your Nest.js server:
yarn start:dev
These will run nodemon, which will cause your Nest.js application to restart if any changes are made, saving you from having to stop, rebuild, and start your application again.