Build a Simple API with NestJS, Express, and Fastify
📖 Scenario: You are creating a simple API to manage a list of books for a small library. You want to understand how to set up this API using three popular Node.js frameworks: NestJS, Express, and Fastify. This will help you see the differences in setup and structure.
🎯 Goal: Build a basic API endpoint /books that returns a list of books using NestJS, Express, and Fastify. You will create the data, configure the server, implement the route, and complete the setup for each framework.
📋 What You'll Learn
Create a list of books with exact titles and authors
Set up a configuration variable for the server port
Implement a GET route /books that returns the book list
Complete the server start code for each framework
💡 Why This Matters
🌍 Real World
APIs like this are common in web apps to provide data to frontend clients or other services.
💼 Career
Understanding how to set up routes and servers in popular Node.js frameworks is essential for backend development roles.
Progress0 / 4 steps
1
Create the books data list
Create a constant array called books with these exact objects: { title: 'The Hobbit', author: 'J.R.R. Tolkien' }, { title: '1984', author: 'George Orwell' }, and { title: 'To Kill a Mockingbird', author: 'Harper Lee' }.
NestJS
Hint
Use const books = [ ... ] with objects inside.
2
Set the server port configuration
Create a constant called PORT and set it to 3000.
NestJS
Hint
Use const PORT = 3000; to set the port number.
3
Implement the GET /books route
Use app.get('/books', (req, res) => { res.json(books); }) to create a route that returns the books array as JSON.
NestJS
Hint
Use app.get('/books', (req, res) => { res.json(books); }).
4
Start the server listening on the port
Add app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); }); to start the Express server.
NestJS
Hint
Use app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); }).
Practice
(1/5)
1. Which framework is known for providing a structured architecture with decorators and dependency injection?
easy
A. Fastify
B. Express
C. NestJS
D. Koa
Solution
Step 1: Understand framework features
NestJS is designed with a modular architecture, using decorators and dependency injection to organize code clearly.
Step 2: Compare with other frameworks
Express is minimal and flexible but lacks built-in structure; Fastify focuses on speed but not on architectural patterns.
Final Answer:
NestJS -> Option C
Quick Check:
Structured framework = NestJS [OK]
Hint: Structured + decorators = NestJS [OK]
Common Mistakes:
Confusing Express's flexibility with structure
Thinking Fastify has built-in dependency injection
Choosing Koa which is unrelated here
2. Which of the following is the correct way to create a Fastify server instance?
easy
A. const app = fastify();
B. const app = express();
C. const app = new NestFactory();
D. const app = new Koa();
Solution
Step 1: Recall Fastify server creation syntax
Fastify servers are created by calling the fastify() function, not using new keyword.
Step 2: Eliminate other options
Express uses express(), NestJS uses NestFactory.create(), and Koa uses new Koa().
Final Answer:
const app = fastify(); -> Option A
Quick Check:
Fastify instance = fastify() [OK]
Hint: Fastify uses fastify() function call [OK]
Common Mistakes:
Using new keyword with fastify
Confusing Express and Fastify syntax
Using NestFactory directly for Fastify
3. Given the following code snippet, what will be the main difference in performance between NestJS using Express and Fastify?
A. NestJS with Express is faster due to simpler middleware
B. NestJS with Fastify is faster due to optimized HTTP handling
C. Both have identical performance because NestJS abstracts the server
D. NestJS with Express supports HTTP/2 by default, Fastify does not
Solution
Step 1: Understand NestJS adapters
NestJS can use Express or Fastify under the hood. Fastify is designed for speed and efficiency.
Step 2: Compare performance traits
Fastify has optimized HTTP handling and lower overhead, making it faster than Express in most cases.
Final Answer:
NestJS with Fastify is faster due to optimized HTTP handling -> Option B
Quick Check:
Fastify = faster HTTP handling [OK]
Hint: Fastify is faster than Express in NestJS [OK]
Common Mistakes:
Assuming Express is faster due to simplicity
Thinking NestJS removes all performance differences
Confusing HTTP/2 support defaults
4. You wrote a NestJS app using Fastify adapter but get an error: TypeError: app.listen is not a function. What is the most likely cause?
medium
A. You forgot to import FastifyModule in AppModule
B. Fastify does not support listen method
C. You called app.listen before await
D. You did not use NestFactory.create with Fastify adapter
Solution
Step 1: Check how NestJS app is created with Fastify
To use Fastify, you must pass the Fastify adapter to NestFactory.create().
Step 2: Understand error cause
If you skip the adapter, NestJS defaults to Express, but if you mix Fastify code without adapter, app.listen may be undefined.
Final Answer:
You did not use NestFactory.create with Fastify adapter -> Option D
Quick Check:
Fastify adapter required for app.listen [OK]
Hint: Use Fastify adapter in NestFactory.create [OK]
Common Mistakes:
Assuming FastifyModule import is enough
Calling listen without await causes different error
Thinking Fastify lacks listen method
5. You want to build a high-performance REST API with automatic validation, modular structure, and fast response times. Which combination best fits this requirement?
hard
A. NestJS using Fastify adapter with class-validator and modules
B. Fastify with no framework on top
C. NestJS using Express adapter without validation
D. Express with manual middleware and no structure
Solution
Step 1: Identify requirements
High performance, automatic validation, and modular structure require a framework with features and speed.
Step 2: Match frameworks to needs
Express alone lacks structure and automatic validation; Fastify alone lacks modularity; NestJS provides structure and validation, and Fastify adapter adds speed.
Final Answer:
NestJS using Fastify adapter with class-validator and modules -> Option A