Lecture Notes Of Class 9: Middleware in Express.js
Objective:
Understand how middleware works in Express.js.
1. What is Middleware?
Middleware in Express.js
refers to functions that have access to the request (req), response (res), and
the next function in the application’s request-response cycle. Middleware
functions can modify the request and response objects, execute code, or end the
request-response cycle. They are a central concept in Express.js for handling
functionality such as logging, authentication, error handling, parsing
requests, and more.
Express.js uses
middleware in a stack-like manner: when a request comes in, it passes through a
sequence of middleware functions before reaching the route handler.
2. Basic Structure of
Middleware
Middleware in Express
follows a standard function signature:
js
CopyEdit
function middleware(req,
res, next) {
// code to modify request or response
next();
// passes control to the next middleware
}
- req:
The request object, which contains details about the client’s request
(like headers, query parameters, and body).
- res:
The response object, which is used to send back the HTTP response.
- next:
A function that passes control to the next middleware function.
3. Types of Middleware
- Application-level
middleware: These are middleware functions
bound to an instance of express(). They are used to handle requests
globally for the application or for specific routes.
- Router-level
middleware: These are middleware functions
bound to a specific instance of express.Router(). They only apply to
routes defined by that router.
- Built-in
middleware: Express has several built-in
middleware functions, such as express.static() for serving static files
and express.json() for parsing JSON requests.
- Error-handling
middleware: These middleware functions have
four arguments (err, req, res, next) and are used to catch and handle
errors in the application.
- Third-party
middleware: These are middleware modules
installed using npm, such as cookie-parser, body-parser, etc.
4. Creating Custom
Middleware
Custom middleware allows
you to perform actions on requests and responses. For example, you might want
to log details about each incoming request to your server.
Example: Custom
middleware to log request details:
js
CopyEdit
const express = require('express');
const app = express();
// Custom middleware
function
const logRequestDetails =
(req, res, next) => {
console.log(`Request Method: ${req.method}`);
console.log(`Request URL: ${req.url}`);
console.log(`Request Time: ${new Date().toISOString()}`);
next();
// Passes control to the next middleware
};
// Use custom middleware
globally
app.use(logRequestDetails);
// Sample route
app.get('/', (req, res)
=> {
res.send('Hello, world!');
});
app.listen(3000, () =>
{
console.log('Server running on port 3000');
});
- Explanation:
- The
logRequestDetails middleware logs the HTTP method (req.method), URL (req.url),
and the current timestamp for each incoming request.
- The
app.use(logRequestDetails) makes this middleware function global for all
routes.
- The
next() function allows the request to continue to the next middleware or
route handler.
5. Using Built-in
Middleware in Express
Express provides several
built-in middleware functions that help you handle common tasks without having
to write your own code.
Example: Using express.json()
middleware for parsing JSON requests
js
CopyEdit
const express = require('express');
const app = express();
// Built-in middleware to
parse JSON requests
app.use(express.json());
// Sample POST route
app.post('/data', (req,
res) => {
console.log(req.body); // Logs the parsed JSON data
res.send('Data received');
});
app.listen(3000, () =>
{
console.log('Server running on port 3000');
});
- Explanation:
- The
express.json() middleware is used to parse incoming JSON payloads in
request bodies.
- The
req.body will automatically contain the parsed JSON data.
- This
middleware is often used in APIs that expect JSON data in requests.
Common Built-in
Middleware Functions:
- express.static():
Serves static files (like images, CSS files, and JavaScript files) from a
specified directory.
js
CopyEdit
app.use(express.static('public'));
This will serve files
from the "public" directory.
- express.urlencoded():
Parses URL-encoded data, often used with forms. It’s the default for form
submissions using application/x-www-form-urlencoded.
js
CopyEdit
app.use(express.urlencoded({
extended: true }));
6. Middleware for
Specific Routes
You can apply middleware
to specific routes or route groups. This allows you to create specialized
behavior for certain routes.
Example: Middleware for a
specific route:
js
CopyEdit
const express = require('express');
const app = express();
// Custom middleware for
a specific route
const logPostRequest = (req,
res, next) => {
console.log('POST request received');
next();
// Passes control to the next handler
};
app.post('/submit',
logPostRequest, (req, res) => {
res.send('Form submitted');
});
app.listen(3000, () =>
{
console.log('Server running on port 3000');
});
- Explanation:
- The
logPostRequest middleware will only be executed for POST requests to the /submit
route.
- The
next() function is used to pass control to the route handler after
logging the request.
7. Error-Handling
Middleware
In Express,
error-handling middleware is used to catch errors and respond to the client
appropriately.
Example: Error-handling
middleware
js
CopyEdit
const express = require('express');
const app = express();
// Sample route that
throws an error
app.get('/', (req, res,
next) => {
const error = new Error('Something went
wrong!');
next(error);
// Pass the error to the error-handling middleware
});
// Error-handling
middleware
app.use((err, req, res,
next) => {
console.error(err.message);
res.status(500).send('Internal Server Error');
});
app.listen(3000, () =>
{
console.log('Server running on port 3000');
});
- Explanation:
- In
this example, the route throws an error that is passed to the next
middleware using next(error).
- The
error-handling middleware catches the error, logs it, and sends a 500
status with an error message to the client.
8. Using Third-Party
Middleware
Many third-party
libraries offer middleware that you can use in your Express app. For instance,
the cookie-parser middleware helps parse cookies in requests.
Example: Using cookie-parser
js
CopyEdit
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// Use the cookie-parser
middleware
app.use(cookieParser());
// Sample route to set
and read cookies
app.get('/set-cookie', (req,
res) => {
res.cookie('user', 'John Doe');
res.send('Cookie has been set');
});
app.get('/get-cookie', (req,
res) => {
const user = req.cookies.user;
res.send(`Hello, ${user}`);
});
app.listen(3000, () =>
{
console.log('Server running on port 3000');
});
- Explanation:
- cookie-parser
is used to parse cookies sent with the request and makes them accessible
via req.cookies.
- The
/set-cookie route sets a cookie, while /get-cookie reads the cookie.
Summary
- Middleware
is a powerful concept in Express.js, used to handle HTTP requests and
responses at various stages of the request-response lifecycle.
- You
can create custom middleware to modify requests or responses and
implement functionality like logging, authentication, etc.
- Built-in
middleware such as express.json() and express.urlencoded()
help with parsing incoming request data.
- Middleware
functions can be applied globally, to specific routes, or for
error handling.
This gives you a solid
foundation to understand and implement middleware in Express.js applications.
Lab Tasks:
1.
Create custom middleware to log
request details: Create middleware that logs the method,
URL, and timestamp for each request.
2.
Use built-in middleware like express.json()
for parsing JSON requests: Implement middleware that parses
JSON data and use it in a route to process the data sent in a POST request.
This class introduces the
fundamental concept of middleware, which plays a critical role in Express.js
applications.
4o mini
You said:
WRITE 10 ASSIGNMENTS FROM
ABOVE CONCEPT WITH STEP BY STEP SOLUTIONS with proper explanation in details
ChatGPT said:
ChatGPT
Assignments on Middleware
in Express.js
Below are 10 assignments
based on Middleware in Express.js, with detailed explanations and
step-by-step solutions for beginners:
Assignment 1: Creating
Custom Middleware to Log Request Details
Objective:
Learn how to create custom middleware to log request details such as method,
URL, and time.
Instructions:
1.
Create an Express.js application.
2.
Create custom middleware to log the HTTP
method, URL, and the timestamp of each incoming request.
3.
Use this middleware globally across all
routes.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Create custom middleware:
js
CopyEdit
const logRequestDetails =
(req, res, next) => {
const time = new Date().toISOString();
console.log(`Request Method: ${req.method}`);
console.log(`Request URL: ${req.url}`);
console.log(`Request Time: ${time}`);
next();
// Pass control to the next middleware
};
3.
Use middleware globally:
js
CopyEdit
app.use(logRequestDetails);
4.
Create routes:
js
CopyEdit
app.get('/', (req, res)
=> {
res.send('Hello, World!');
});
app.post('/submit', (req,
res) => {
res.send('Data submitted');
});
5.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
middleware logRequestDetails logs the request method, URL, and timestamp
for each incoming request.
- The
app.use() method applies the middleware to all routes in the app.
Assignment 2: Using express.json()
to Parse JSON Requests
Objective:
Learn how to use the built-in middleware express.json() to parse incoming JSON
data in the request body.
Instructions:
1.
Create an Express application.
2.
Use express.json() middleware to parse
incoming JSON requests.
3.
Create a POST route that accepts JSON data
and logs the parsed request body.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Use express.json() middleware:
js
CopyEdit
app.use(express.json()); // Built-in middleware to parse JSON data
3.
Create a POST route:
js
CopyEdit
app.post('/data', (req,
res) => {
console.log(req.body); // Logs the parsed JSON data
res.send('Data received');
});
4.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
express.json() middleware is used to automatically parse incoming JSON
request bodies.
- In
the POST route, the parsed JSON data can be accessed using req.body.
Assignment 3: Creating
Route-Level Middleware
Objective:
Learn how to apply middleware to specific routes.
Instructions:
1.
Create an Express application.
2.
Create a custom middleware that logs
"Route Accessed".
3.
Apply this middleware only to the /about
route.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Create custom route-level middleware:
js
CopyEdit
const logRouteAccess = (req,
res, next) => {
console.log('Route Accessed');
next();
};
3.
Apply middleware to specific route:
js
CopyEdit
app.use('/about',
logRouteAccess);
4.
Create routes:
js
CopyEdit
app.get('/', (req, res)
=> {
res.send('Home');
});
app.get('/about', (req,
res) => {
res.send('About');
});
5.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
middleware logRouteAccess is applied only to the /about route using app.use('/about',
logRouteAccess).
- The
middleware logs a message when the /about route is accessed.
Assignment 4: Using
Multiple Middleware Functions
Objective:
Learn how to use multiple middleware functions for a route.
Instructions:
1.
Create an Express application.
2.
Create two middleware functions: one for
logging and another for validation.
3.
Apply both middleware functions to the /login
route.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Create logging middleware:
js
CopyEdit
const logRequest = (req,
res, next) => {
console.log(`Request Method: ${req.method}`);
console.log(`Request URL: ${req.url}`);
next();
};
3.
Create validation middleware:
js
CopyEdit
const validateForm = (req,
res, next) => {
if (!req.body.username || !req.body.password)
{
return res.status(400).send('Missing
username or password');
}
next();
};
4.
Use both middleware functions for /login
route:
js
CopyEdit
app.use(express.json());
app.post('/login',
logRequest, validateForm, (req, res) => {
res.send('Login successful');
});
5.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- Both
the logRequest and validateForm middleware functions are applied to the /login
route in sequence.
- If
validation fails, an error response is sent before reaching the route
handler.
Assignment 5: Using
Built-In Middleware express.static()
Objective:
Learn how to serve static files using Express's built-in express.static()
middleware.
Instructions:
1.
Create an Express application.
2.
Use express.static() to serve static files
from a public directory.
3.
Add an HTML file in the public directory
and access it via the browser.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Serve static files using express.static():
js
CopyEdit
app.use(express.static('public')); // Serves static files from the
"public" directory
3.
Create an HTML file:
o Place
a index.html file inside the public directory with some content, such as:
html
CopyEdit
<html>
<body>
<h1>Welcome to Express</h1>
</body>
</html>
4.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
express.static() middleware allows the server to serve static files from a
specified directory (in this case, public).
- The
HTML file can be accessed by navigating to http://localhost:3000/index.html.
Assignment 6: Handling
Errors with Error-Handling Middleware
Objective:
Learn how to create an error-handling middleware to catch and handle errors.
Instructions:
1.
Create an Express application.
2.
Create a route that throws an error.
3.
Create an error-handling middleware that
catches and responds with a proper error message.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Create a route that throws an error:
js
CopyEdit
app.get('/', (req, res,
next) => {
const error = new Error('Something went
wrong!');
next(error);
// Pass error to next middleware
});
3.
Create an error-handling middleware:
js
CopyEdit
app.use((err, req, res,
next) => {
console.error(err.message);
res.status(500).send('Internal Server Error');
});
4.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
error is passed to the next middleware using next(error).
- The
error-handling middleware catches the error and responds with a status
code 500 and an error message.
Assignment 7: Using
Cookie Middleware with cookie-parser
Objective:
Learn how to parse cookies in requests using the cookie-parser middleware.
Instructions:
1.
Create an Express application.
2.
Install and use the cookie-parser
middleware.
3.
Set a cookie in one route and read it in
another route.
Solution:
1.
Install cookie-parser:
bash
CopyEdit
npm install cookie-parser
2.
Create an Express application:
js
CopyEdit
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
const port = 3000;
3.
Use cookie-parser middleware:
js
CopyEdit
app.use(cookieParser());
4.
Set a cookie in a route:
js
CopyEdit
app.get('/set-cookie', (req,
res) => {
res.cookie('user', 'JohnDoe');
res.send('Cookie has been set');
});
5.
Read the cookie in another route:
js
CopyEdit
app.get('/get-cookie', (req,
res) => {
res.send(`User cookie value: ${req.cookies.user}`);
});
6.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
cookie-parser middleware parses cookies sent in the request.
- The
/set-cookie route sets a cookie, and the /get-cookie route retrieves the
cookie's value.
Assignment 8:
Implementing Authentication Middleware
Objective:
Learn how to create authentication middleware to protect certain routes.
Instructions:
1.
Create an Express application.
2.
Create a simple authentication middleware
that checks if a user is logged in (based on a cookie).
3.
Apply the middleware to protect a route.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
const port = 3000;
2.
Use cookie-parser middleware:
js
CopyEdit
app.use(cookieParser());
3.
Create authentication middleware:
js
CopyEdit
const authenticate = (req,
res, next) => {
if (!req.cookies.user) {
return res.status(401).send('Unauthorized');
}
next();
};
4.
Create protected route:
js
CopyEdit
app.get('/dashboard',
authenticate, (req, res) => {
res.send('Welcome to your dashboard');
});
5.
Create login route:
js
CopyEdit
app.get('/login', (req,
res) => {
res.cookie('user', 'JohnDoe');
res.send('Logged in');
});
6.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
authenticate middleware checks if a cookie named user exists.
- The
/dashboard route is protected by this middleware and can only be accessed
if the user is authenticated.
Assignment 9: Rate
Limiting Middleware
Objective:
Learn how to implement basic rate limiting using custom middleware.
Instructions:
1.
Create an Express application.
2.
Create a middleware to limit the number of
requests per user.
3.
Apply the rate-limiting middleware to all
routes.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Create rate-limiting middleware:
js
CopyEdit
const requestCount = {};
const rateLimit = (req,
res, next) => {
const ip = req.ip;
if (!requestCount[ip]) {
requestCount[ip] = 0;
}
requestCount[ip]++;
if (requestCount[ip] > 5) {
return res.status(429).send('Too many
requests');
}
next();
};
3.
Apply the middleware globally:
js
CopyEdit
app.use(rateLimit);
4.
Create routes:
js
CopyEdit
app.get('/', (req, res)
=> {
res.send('Home');
});
5.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
middleware counts the number of requests from each IP address.
- If
a user exceeds 5 requests, they are rate-limited and receive a 429 Too
Many Requests response.
Assignment 10:
Time-Logging Middleware with Performance Metrics
Objective:
Learn how to log the time taken for each request using middleware.
Instructions:
1.
Create an Express application.
2.
Create middleware to log the time taken
for each request.
3.
Use this middleware on all routes.
Solution:
1.
Create an Express application:
js
CopyEdit
const express = require('express');
const app = express();
const port = 3000;
2.
Create time-logging middleware:
js
CopyEdit
const logTimeTaken = (req,
res, next) => {
const start = Date.now();
res.on('finish', () => {
const duration = Date.now() - start;
console.log(`Request to ${req.url} took ${duration}ms`);
});
next();
};
3.
Apply the middleware globally:
js
CopyEdit
app.use(logTimeTaken);
4.
Create routes:
js
CopyEdit
app.get('/', (req, res)
=> {
res.send('Home');
});
5.
Start the server:
js
CopyEdit
app.listen(port, () =>
{
console.log(`Server running on port ${port}`);
});
Explanation:
- The
middleware calculates the time difference between the start and finish of
the request.
- It
logs the duration taken to process each request.
These assignments cover
different aspects of using middleware in Express.js, starting from basic
logging to more complex features like rate limiting and authentication. The
provided solutions give step-by-step instructions and explanations for
beginners.
4o mini
You said:
WRITE 50 no of MCQs only
FROM ABOVE CONCEPT with explanation
ChatGPT said:
ChatGPT
Here are 50
multiple-choice questions (MCQs) based on the above concepts with explanations:
1. What is the purpose of
middleware in Express.js?
- a)
To handle HTTP requests directly
- b)
To add additional functionality in the request-response cycle
- c)
To replace HTTP requests
- d)
To store server configuration
Answer:
b) To add additional functionality in the request-response cycle
Explanation: Middleware functions have access to the request and
response objects, and they can modify or end the request-response cycle.
2. Which of the following
is NOT a common use of middleware in Express.js?
- a)
Logging request information
- b)
Handling errors
- c)
Parsing JSON request bodies
- d)
Sending email notifications
Answer:
d) Sending email notifications
Explanation: Middleware in Express.js is typically used for logging,
error handling, and request processing, not for sending email notifications.
3. What does app.use(cookieParser());
do in Express.js?
- a)
Creates a new cookie
- b)
Decodes cookies in the request
- c)
Encrypts cookies
- d)
Deletes cookies
Answer:
b) Decodes cookies in the request
Explanation: The cookie-parser middleware parses cookies attached to the
client request and makes them available in req.cookies.
4. How would you set a
cookie in Express.js?
- a)
res.cookie('key', 'value')
- b)
req.cookie('key', 'value')
- c)
app.cookie('key', 'value')
- d)
res.setCookie('key', 'value')
Answer:
a) res.cookie('key', 'value')
Explanation: res.cookie() is used to set cookies in Express.js.
5. How do you read
cookies in Express.js after setting them?
- a)
req.cookies['key']
- b)
req.cookies.key
- c)
req.get('key')
- d)
req.readCookies('key')
Answer:
b) req.cookies.key
Explanation: After using the cookie-parser middleware, cookies are
available as an object in req.cookies.
6. What is the role of
the next() function in middleware?
- a)
It ends the request-response cycle
- b)
It moves to the next middleware or route handler
- c)
It terminates the application
- d)
It initializes the request-response cycle
Answer:
b) It moves to the next middleware or route handler
Explanation: next() is used to pass control to the next middleware or
route handler in the Express.js stack.
7. What does the
following middleware do: const authenticate = (req, res, next) => { if
(!req.cookies.user) { return res.status(401).send('Unauthorized'); } next(); }?
- a)
Authenticates users based on IP address
- b)
Checks if a user cookie exists and sends a 401 error if not
- c)
Redirects users to the login page
- d)
Logs user information to the console
Answer:
b) Checks if a user cookie exists and sends a 401 error if not
Explanation: This middleware checks for the presence of a user cookie.
If it's missing, a 401 Unauthorized status is sent.
8. Which HTTP status code
is sent when a user is unauthorized?
- a)
200 OK
- b)
301 Moved Permanently
- c)
401 Unauthorized
- d)
404 Not Found
Answer:
c) 401 Unauthorized
Explanation: The 401 status code indicates that the request is not
authorized.
9. What happens when a
rate-limiting middleware detects more than 5 requests from a user?
- a)
The user is redirected to a login page
- b)
The user is allowed to continue making requests
- c)
A 429 Too Many Requests status is sent
- d)
The user is logged out
Answer:
c) A 429 Too Many Requests status is sent
Explanation: If a user exceeds the rate limit, the middleware sends a 429
status code, indicating too many requests.
10. How can you track the
number of requests from a user in a rate-limiting middleware?
- a)
Use the user’s IP address
- b)
Use the user’s session ID
- c)
Use the request URL
- d)
Use the request body
Answer:
a) Use the user’s IP address
Explanation: The user’s IP address is typically used to track the number
of requests in a rate-limiting middleware.
11. What does the
following line do in middleware: res.on('finish', () => { const duration =
Date.now() - start; console.log('Request took', duration, 'ms'); });?
- a)
Logs the time the request took after the response has finished
- b)
Logs the request's status code
- c)
Starts a timer for the request
- d)
Sends the response to the client
Answer:
a) Logs the time the request took after the response has finished
Explanation: The finish event triggers when the response has been sent,
and it calculates and logs the duration of the request.
12. Which of the
following is true about custom middleware in Express.js?
- a)
Middleware functions can only be applied globally
- b)
Middleware functions can modify the request or response objects
- c)
Middleware functions must send a response
- d)
Middleware functions cannot be used for logging
Answer:
b) Middleware functions can modify the request or response objects
Explanation: Middleware can modify the request and response objects, add
properties, or end the request-response cycle.
13. In Express.js, which
method is used to define a route handler for a GET request?
- a)
app.use()
- b)
app.get()
- c)
app.post()
- d)
app.route()
Answer:
b) app.get()
Explanation: app.get() is used to define route handlers for GET
requests.
14. Which Express.js
method is used to send a cookie to the client?
- a)
res.set()
- b)
res.sendCookie()
- c)
res.cookie()
- d)
res.setHeader()
Answer:
c) res.cookie()
Explanation: res.cookie() is used to send cookies from the server to the
client.
15. What is the main
purpose of using the cookie-parser middleware?
- a)
Encrypt cookies
- b)
Parse cookies in the request
- c)
Validate cookies
- d)
Set cookies
Answer:
b) Parse cookies in the request
Explanation: cookie-parser decodes cookies attached to incoming requests
and makes them accessible through req.cookies.
16. What is the
significance of using res.status(401) in Express.js?
- a)
It sends a successful response
- b)
It indicates the resource was not found
- c)
It indicates an unauthorized access attempt
- d)
It signals a server error
Answer:
c) It indicates an unauthorized access attempt
Explanation: A 401 status code indicates that the request has not been
applied because it lacks valid authentication credentials.
17. What is the default
value of the expires option when setting a cookie in Express.js?
- a)
It is set to 1 day
- b)
It is set to a session expiration
- c)
It is set to 1 hour
- d)
It is set to a specific date in the future
Answer:
b) It is set to a session expiration
Explanation: By default, cookies are set to expire at the end of the
session (when the browser is closed).
18. What middleware would
you use to parse JSON data in an incoming request body?
- a)
cookie-parser
- b)
express.json()
- c)
express.urlencoded()
- d)
body-parser
Answer:
b) express.json()
Explanation: express.json() is used to parse JSON-encoded request
bodies.
19. In which scenario
would you use app.use() in Express.js?
- a)
When you need to define a route handler
- b)
When you need to apply middleware globally
- c)
When you need to start the server
- d)
When you need to parse request bodies
Answer:
b) When you need to apply middleware globally
Explanation: app.use() is used to apply middleware globally for all
routes or a subset of routes.
20. How do you handle
errors in Express.js using middleware?
- a)
By calling next() with an error object
- b)
By using try/catch in the route handler
- c)
By using res.sendError()
- d)
By using app.errorHandler()
Answer:
a) By calling next() with an error object
Explanation: Error-handling middleware is invoked by passing an error
object to next() in the route handler.
21. What is the correct
syntax to limit the number of requests from a single IP address?
- a)
app.use(rateLimit)
- b)
rateLimit.use(app)
- c)
app.limitRequests()
- d)
rateLimit.configure(app)
Answer:
a) app.use(rateLimit)
Explanation: A rate-limiting middleware, such as express-rate-limit, is
applied with app.use().
22. Which HTTP status
code would you use to indicate a successful operation?
- a)
200
- b)
301
- c)
400
- d)
500
Answer:
a) 200
Explanation: 200 OK is the standard response for a successful HTTP
request.
23. How do you pass
parameters in a route using Express.js?
- a)
By using the query string
- b)
By including parameters in the URL path
- c)
By sending parameters in the request header
- d)
By passing parameters via cookies
Answer:
b) By including parameters in the URL path
Explanation: Parameters are included in the route URL, for example, app.get('/user/:id',
...).
24. What does req.body
contain in an Express.js application?
- a)
Data sent in the request body
- b)
Query parameters
- c)
URL parameters
- d)
Headers
Answer:
a) Data sent in the request body
Explanation: req.body contains the data sent in the body of the request,
typically used with express.json() or express.urlencoded() middleware.
25. What does app.listen(3000)
do in Express.js?
- a)
Starts the application server on port 3000
- b)
Listens for incoming requests
- c)
Initializes the app object
- d)
Defines the route handlers
Answer:
a) Starts the application server on port 3000
Explanation: app.listen() binds the server to the specified port and
starts listening for incoming HTTP requests.
26. What does the res.send()
method do in Express.js?
- a)
Sets the response status code
- b)
Sends a response to the client
- c)
Ends the response cycle
- d)
Redirects to another page
Answer:
b) Sends a response to the client
Explanation: res.send() sends the response body to the client and ends
the response cycle.
27. Which of the
following methods is used to set HTTP headers in Express.js?
- a)
res.set()
- b)
res.headers()
- c)
req.setHeader()
- d)
res.setHeaders()
Answer:
a) res.set()
Explanation: res.set() is used to set HTTP headers in the response.
28. What is the function
of express.static()?
- a)
Serves static files from a directory
- b)
Defines static routes
- c)
Logs static requests
- d)
Generates static content dynamically
Answer:
a) Serves static files from a directory
Explanation: express.static() is used to serve static files like images,
CSS files, and JavaScript files.
29. What does res.redirect(301)
do in Express.js?
- a)
It sends a permanent redirect to another URL
- b)
It sends a temporary redirect to another URL
- c)
It redirects based on cookies
- d)
It redirects based on query parameters
Answer:
a) It sends a permanent redirect to another URL
Explanation: 301 Moved Permanently is used for permanent redirects in
HTTP.
30. How do you use
parameters in Express.js routes?
- a)
By enclosing them in curly braces
- b)
By appending them as query strings
- c)
By using URL path segments with :
- d)
By defining them in headers
Answer:
c) By using URL path segments with :
Explanation: Parameters are added in the URL path using :parameterName.
31. What does the express.Router()
function do?
- a)
Defines global routes
- b)
Defines modular route handlers
- c)
Starts the server
- d)
Handles incoming requests directly
Answer:
b) Defines modular route handlers
Explanation: express.Router() allows defining route handlers modularly
for better organization.
32. What is the correct
syntax to define a middleware that logs every request in Express.js?
- a)
app.use(logRequest)
- b)
app.logRequest()
- c)
app.route(logRequest)
- d)
app.handle(logRequest)
Answer:
a) app.use(logRequest)
Explanation: Middleware is applied globally with app.use(), which allows
it to run for every incoming request.
33. What is the purpose
of the next parameter in middleware?
- a)
To handle asynchronous code
- b)
To call the next function in the middleware stack
- c)
To skip the current middleware
- d)
To close the connection
Answer:
b) To call the next function in the middleware stack
Explanation: The next function is used to pass control to the next
middleware in the stack.
34. Which of the
following is a valid method for defining a route handler for POST requests in
Express.js?
- a)
app.post()
- b)
app.usePost()
- c)
app.handle()
- d)
app.request()
Answer:
a) app.post()
Explanation: app.post() defines route handlers for POST requests in
Express.js.
35. What type of
middleware is express.json()?
- a)
Request body parsing middleware
- b)
Error-handling middleware
- c)
Static file serving middleware
- d)
Response header middleware
Answer:
a) Request body parsing middleware
Explanation: express.json() is used to parse incoming JSON request
bodies.
36. What does res.json()
do in Express.js?
- a)
Sends a JSON-formatted response
- b)
Sends the response status code
- c)
Parses a JSON request
- d)
Converts data to JSON
Answer:
a) Sends a JSON-formatted response
Explanation: res.json() sends a response with JSON data and sets the Content-Type
to application/json.
37. How can you define a
route parameter in Express.js?
- a)
By using req.param()
- b)
By adding :parameterName to the route path
- c)
By defining them in the URL query
- d)
By using app.param()
Answer:
b) By adding :parameterName to the route path
Explanation: Route parameters are defined in the URL path using :parameterName.
38. Which middleware is
used for parsing URL-encoded request bodies in Express.js?
- a)
express.urlencoded()
- b)
express.json()
- c)
express.cookieParser()
- d)
body-parser.urlencoded()
Answer:
a) express.urlencoded()
Explanation: express.urlencoded() is used to parse URL-encoded bodies.
39. What does req.query
contain in an Express.js route handler?
- a)
URL parameters
- b)
Body data
- c)
Query string parameters
- d)
Cookies
Answer:
c) Query string parameters
Explanation: req.query contains data from the query string of the URL
(e.g., ?key=value).
40. How do you serve
static files in Express.js?
- a)
By using app.static()
- b)
By using express.static() middleware
- c)
By using app.useStatic()
- d)
By using res.sendFile()
Answer:
b) By using express.static() middleware
Explanation: The express.static() middleware serves static files from a
specified directory.
41. How do you use app.all()
in Express.js?
- a)
To handle all HTTP methods for a route
- b)
To handle POST requests only
- c)
To handle GET requests only
- d)
To handle error handling
Answer:
a) To handle all HTTP methods for a route
Explanation: app.all() is used to handle all HTTP methods (GET, POST,
etc.) for a specific route.
42. How would you define
a PUT request handler in Express.js?
- a)
app.put()
- b)
app.request()
- c)
app.post()
- d)
app.patch()
Answer:
a) app.put()
Explanation: app.put() defines route handlers for PUT requests.
43. What is the default
response content type for res.send()?
- a)
application/json
- b)
text/plain
- c)
text/html
- d)
application/xml
Answer:
b) text/plain
Explanation: By default, res.send() sends plain text as the response
body.
44. Which of the
following is NOT an HTTP method supported by Express.js?
- a)
GET
- b)
POST
- c)
FETCH
- d)
PUT
Answer:
c) FETCH
Explanation: FETCH is not an HTTP method but rather a JavaScript API for
making HTTP requests.
45. What does the res.status()
method do?
- a)
Sets the response status code
- b)
Ends the response
- c)
Sets the response body
- d)
Sends the response headers
Answer:
a) Sets the response status code
Explanation: res.status() sets the status code for the response.
46. What is the purpose
of the app.use() method?
- a)
To define the route handlers
- b)
To define middleware functions
- c)
To start the server
- d)
To handle errors
Answer:
b) To define middleware functions
Explanation: app.use() is used to apply middleware functions to the
application.
47. Which method in
Express.js is used to handle error responses?
- a)
res.error()
- b)
res.fail()
- c)
next()
- d)
res.sendError()
Answer:
c) next()
Explanation: next() is used in error-handling middleware to pass control
to the next middleware or error handler.
48. Which HTTP status
code indicates a resource has been permanently moved?
- a)
301
- b)
302
- c)
404
- d)
410
Answer:
a) 301
Explanation: 301 Moved Permanently indicates that a resource has been
permanently moved to another URL.
49. What is the purpose
of app.set() in Express.js?
- a)
To configure application settings
- b)
To define route handlers
- c)
To start the server
- d)
To handle requests
Answer:
a) To configure application settings
Explanation: app.set() is used to set various application settings, like
the view engine or environment.
50. Which middleware is
used to handle multipart form data in Express.js?
- a)
multer
- b)
express.formData()
- c)
express.multipart()
- d)
body-parser.multipart()
Answer:
a) multer
Explanation: multer is the middleware used for handling multipart form
data, such as file uploads.
4o mini
You said:
next 50
ChatGPT said:
ChatGPT
Here are the next 50
multiple-choice questions (MCQs) based on Express.js concepts:
51. Which of the
following is used to handle errors in Express.js?
- a)
app.error()
- b)
next()
- c)
app.handle()
- d)
errorHandler()
Answer:
b) next()
Explanation: In Express, next() is used to pass control to the next
middleware, especially in error-handling scenarios.
52. What does the res.sendFile()
function do?
- a)
Sends the file as a response
- b)
Sends the file data as JSON
- c)
Sends the file for download
- d)
Sends a file as a static resource
Answer:
a) Sends the file as a response
Explanation: res.sendFile() sends the requested file as a response to
the client.
53. What is the purpose
of the express.Router()?
- a)
To handle HTTP methods
- b)
To define a module that groups related routes
- c)
To create an app instance
- d)
To define middleware for the application
Answer:
b) To define a module that groups related routes
Explanation: express.Router() helps modularize route handling by
grouping related routes together.
54. How do you create a
dynamic route parameter in Express.js?
- a)
app.get('/route/:param', ...)
- b)
app.get('/route*param', ...)
- c)
app.get('/route?param', ...)
- d)
app.get('/route/${param}', ...)
Answer:
a) app.get('/route/:param', ...)
Explanation: A dynamic route parameter is defined with a colon (:)
followed by the parameter name.
55. How do you make a
route handler respond only to GET requests in Express?
- a)
app.get()
- b)
app.post()
- c)
app.use()
- d)
app.all()
Answer:
a) app.get()
Explanation: app.get() defines a route handler specifically for GET
requests.
56. Which middleware is
used for parsing JSON payloads in Express.js?
- a)
express.json()
- b)
body-parser.json()
- c)
express.urlencoded()
- d)
body-parser.urlencoded()
Answer:
a) express.json()
Explanation: express.json() is used to parse incoming JSON request
bodies.
57. How do you create a
custom middleware function in Express.js?
- a)
app.use(customMiddleware)
- b)
app.customMiddleware()
- c)
customMiddleware.use()
- d)
express.use(customMiddleware)
Answer:
a) app.use(customMiddleware)
Explanation: app.use() is used to apply custom middleware functions in
the request-handling pipeline.
58. What does express.urlencoded()
middleware do?
- a)
Parses URL-encoded data from request bodies
- b)
Serves static files
- c)
Logs requests to the console
- d)
Handles errors in the app
Answer:
a) Parses URL-encoded data from request bodies
Explanation: express.urlencoded() parses URL-encoded data, typically
from forms, and makes it available on req.body.
59. What will app.listen(4000)
do in Express.js?
- a)
Starts the server on port 4000
- b)
Initializes the database on port 4000
- c)
Configures the route for port 4000
- d)
Sends a response on port 4000
Answer:
a) Starts the server on port 4000
Explanation: app.listen() binds the server to the specified port (in
this case, 4000).
60. What is the purpose
of the res.status() method in Express.js?
- a)
To set the response status code
- b)
To define the route status
- c)
To parse the request body
- d)
To handle query parameters
Answer:
a) To set the response status code
Explanation: res.status() sets the HTTP status code for the response.
61. How would you create
a route for handling PUT requests in Express?
- a)
app.put('/path', handler)
- b)
app.post('/path', handler)
- c)
app.delete('/path', handler)
- d)
app.get('/path', handler)
Answer:
a) app.put('/path', handler)
Explanation: app.put() is used to handle PUT requests at the specified
path.
62. How can you set a
custom HTTP header in Express.js?
- a)
res.setHeader()
- b)
res.set()
- c)
res.headers()
- d)
req.setHeader()
Answer:
b) res.set()
Explanation: res.set() allows setting custom HTTP headers in the
response.
63. How do you define an
error-handling middleware in Express?
- a)
By using app.use() with four arguments: err, req, res, next
- b)
By using app.error()
- c)
By using app.catch()
- d)
By using next(err) in regular middleware
Answer:
a) By using app.use() with four arguments: err, req, res, next
Explanation: Error-handling middleware in Express requires four
arguments and is used with app.use().
64. What will res.send('Hello')
do?
- a)
Sends the response with 'Hello' as the body
- b)
Redirects to the 'Hello' URL
- c)
Returns 'Hello' as JSON
- d)
Returns 'Hello' as an HTML page
Answer:
a) Sends the response with 'Hello' as the body
Explanation: res.send() sends the response body to the client, in this
case, the text 'Hello'.
65. Which function is
used to set the view engine in Express?
- a)
app.set('view engine', 'ejs')
- b)
app.view('engine', 'ejs')
- c)
app.engine('view', 'ejs')
- d)
app.use('view engine', 'ejs')
Answer:
a) app.set('view engine', 'ejs')
Explanation: app.set('view engine', 'ejs') is used to set the view
engine, in this case, EJS.
66. How do you handle
query parameters in Express?
- a)
req.query
- b)
req.params
- c)
req.body
- d)
req.headers
Answer:
a) req.query
Explanation: Query parameters in the URL can be accessed via req.query.
67. What is the purpose
of the express.static() middleware?
- a)
To serve static files such as images, CSS, and JS
- b)
To serve dynamic routes
- c)
To parse form data
- d)
To handle HTTP requests
Answer:
a) To serve static files such as images, CSS, and JS
Explanation: express.static() is used to serve static files from a
directory.
68. How can you handle
form submissions in Express.js?
- a)
By using express.urlencoded() and express.json()
- b)
By using app.post()
- c)
By using req.form()
- d)
By using req.body()
Answer:
a) By using express.urlencoded() and express.json()
Explanation: Form data can be handled using express.urlencoded() to
parse URL-encoded data and express.json() for JSON.
69. What is the correct
way to define a GET route in Express?
- a)
app.get('/route', handler)
- b)
app.post('/route', handler)
- c)
app.put('/route', handler)
- d)
app.delete('/route', handler)
Answer:
a) app.get('/route', handler)
Explanation: app.get() defines a route handler for GET requests.
70. What is a route
parameter in Express.js?
- a)
A dynamic value in the URL path
- b)
A header value in the request
- c)
A query string parameter
- d)
A form field parameter
Answer:
a) A dynamic value in the URL path
Explanation: Route parameters are dynamic placeholders in the URL, like :id.
71. What is the default
port Express uses when no port is specified?
- a)
3000
- b)
8080
- c)
4000
- d)
5000
Answer:
a) 3000
Explanation: If no port is specified, Express defaults to port 3000.
72. What middleware can
you use for handling file uploads in Express?
- a)
multer
- b)
body-parser
- c)
express-fileupload
- d)
express.static
Answer:
a) multer
Explanation: multer is a middleware for handling multipart form data,
including file uploads.
73. How can you serve a
specific file in Express?
- a)
res.sendFile(path)
- b)
res.send(path)
- c)
res.file(path)
- d)
res.serve(path)
Answer:
a) res.sendFile(path)
Explanation: res.sendFile() is used to send a specific file to the
client.
74. How can you log
incoming requests in Express?
- a)
By using morgan middleware
- b)
By using console.log(req)
- c)
By using res.log()
- d)
By using req.logger()
Answer:
a) By using morgan middleware
Explanation: morgan is a popular logging middleware for Express that
logs incoming requests.
75. How do you use
middleware for handling different types of HTTP methods?
- a)
By defining middleware for app.get(), app.post(), etc.
- b)
By using app.use()
- c)
By using app.method()
- d)
By using app.all()
Answer:
a) By defining middleware for app.get(), app.post(), etc.
Explanation: Middleware can be defined for specific HTTP methods like app.get(),
app.post(), etc.
76. How do you send a
JSON response in Express?
- a)
res.json()
- b)
res.sendJSON()
- c)
res.responseJSON()
- d)
res.send()
Answer:
a) res.json()
Explanation: res.json() sends a JSON response to the client.
77. How can you prevent a
route handler from being executed multiple times?
- a)
By using return in the route handler
- b)
By using next()
- c)
By using res.end()
- d)
By using app.use()
Answer:
a) By using return in the route handler
Explanation: Using return prevents further execution of the middleware
stack.
78. What is a middleware
function?
- a)
A function that processes a request and response
- b)
A function that sends an HTTP request
- c)
A function that connects to a database
- d)
A function that creates a route
Answer:
a) A function that processes a request and response
Explanation: A middleware function processes requests and responses,
typically used for modifying the request or handling cross-cutting concerns.
79. What is the default
status code when res.send() is used in Express?
- a)
200
- b)
404
- c)
301
- d)
500
Answer:
a) 200
Explanation: res.send() sends a successful response with a default
status code of 200.
80. Which middleware is
used to handle URL-encoded data in Express?
- a)
express.urlencoded()
- b)
express.json()
- c)
body-parser.urlencoded()
- d)
body-parser.json()
Answer:
a) express.urlencoded()
Explanation: express.urlencoded() middleware parses URL-encoded data in
the request body.
4o mini
You said:
rest 20
ChatGPT said:
ChatGPT
Here are the final 20
multiple-choice questions (MCQs) based on Express.js concepts:
81. What is the purpose
of the app.use() method in Express?
- a)
To set up middleware
- b)
To handle HTTP requests
- c)
To set up static file handling
- d)
To create route handlers
Answer:
a) To set up middleware
Explanation: app.use() is used to set up middleware functions that
process requests before reaching the route handler.
82. How can you redirect
a user to another URL in Express?
- a)
res.redirect(url)
- b)
res.redirectTo(url)
- c)
res.goTo(url)
- d)
res.route(url)
Answer:
a) res.redirect(url)
Explanation: res.redirect() is used to redirect the user to another URL.
83. Which of the
following methods is used to handle DELETE requests in Express?
- a)
app.delete()
- b)
app.remove()
- c)
app.removeRequest()
- d)
app.del()
Answer:
a) app.delete()
Explanation: app.delete() is used to handle DELETE requests in Express.
84. What is the purpose
of the next() function in middleware?
- a)
It passes control to the next middleware or route handler
- b)
It sends the response to the client
- c)
It handles the error
- d)
It ends the response
Answer:
a) It passes control to the next middleware or route handler
Explanation: next() is used in middleware to pass the request to the
next middleware or route handler in the stack.
85. How do you serve
static files from a folder in Express?
- a)
app.use(express.static('public'))
- b)
app.serveStatic('public')
- c)
app.use('/static', express.static('public'))
- d)
app.static('public')
Answer:
a) app.use(express.static('public'))
Explanation: express.static() serves static files from a specified
directory like public.
86. How can you access
route parameters in Express?
- a)
req.params
- b)
req.body
- c)
req.query
- d)
req.headers
Answer:
a) req.params
Explanation: Route parameters are accessible through req.params.
87. How would you use
middleware to perform a task before the route handler in Express?
- a)
By calling next() inside the middleware function
- b)
By directly sending a response
- c)
By returning a promise from the middleware
- d)
By using res.send()
Answer:
a) By calling next() inside the middleware function
Explanation: next() is used in middleware to pass control to the next
middleware or route handler.
88. What is a common use
case for the express.json() middleware?
- a)
To parse incoming JSON request bodies
- b)
To serve static files
- c)
To handle errors
- d)
To log incoming requests
Answer:
a) To parse incoming JSON request bodies
Explanation: express.json() parses incoming JSON payloads in request
bodies.
89. Which of the
following methods is used to handle PATCH requests in Express?
- a)
app.patch()
- b)
app.put()
- c)
app.post()
- d)
app.delete()
Answer:
a) app.patch()
Explanation: app.patch() is used to handle PATCH requests for partially
updating resources.
90. Which of the
following can be used to check if a request has a specific header in Express?
- a)
req.get(headerName)
- b)
req.headers(headerName)
- c)
req.hasHeader(headerName)
- d)
req.check(headerName)
Answer:
a) req.get(headerName)
Explanation: req.get() retrieves the value of a specific header.
91. How can you handle
all HTTP methods at once for a route in Express?
- a)
app.all('/path', handler)
- b)
app.any('/path', handler)
- c)
app.method('/path', handler)
- d)
app.allMethods('/path', handler)
Answer:
a) app.all('/path', handler)
Explanation: app.all() is used to handle all HTTP methods for a specific
route.
92. How would you serve a
specific HTML file in an Express route handler?
- a)
res.sendFile(path)
- b)
res.render(path)
- c)
res.send(path)
- d)
res.html(path)
Answer:
a) res.sendFile(path)
Explanation: res.sendFile() sends a specific file, such as an HTML file,
to the client.
93. What does req.body
contain in Express?
- a)
The parsed data from the request body
- b)
The URL parameters
- c)
The HTTP headers
- d)
The request method
Answer:
a) The parsed data from the request body
Explanation: req.body contains the parsed data from the request body,
such as form data or JSON.
94. What is the role of
the express.Router() in Express?
- a)
To define modular route handlers
- b)
To manage static file handling
- c)
To configure middleware for the entire app
- d)
To handle errors globally
Answer:
a) To define modular route handlers
Explanation: express.Router() allows you to define modular route
handlers that can be used in different parts of your application.
95. What is the default
behavior of res.send() when called with an object as an argument?
- a)
It sends the object as a JSON response
- b)
It sends the object as a plain text response
- c)
It converts the object to a string and sends it
- d)
It sends the object as an HTML page
Answer:
a) It sends the object as a JSON response
Explanation: When res.send() is called with an object, it automatically
converts it to a JSON response.
96. What does the express.Router().use()
method do?
- a)
It applies middleware to the router
- b)
It defines a new route handler
- c)
It sends a response
- d)
It renders a view
Answer:
a) It applies middleware to the router
Explanation: express.Router().use() applies middleware to a specific
router, similar to how app.use() works for the entire application.
97. Which of the
following is used to handle errors in Express?
- a)
next(err)
- b)
res.error(err)
- c)
app.error(err)
- d)
app.fail(err)
Answer:
a) next(err)
Explanation: In Express, next(err) is used to pass errors to
error-handling middleware.
98. How can you restrict
a route to only be accessible by certain HTTP methods?
- a)
By defining specific methods (GET, POST, etc.) for the route
- b)
By using app.restrict()
- c)
By using app.filter()
- d)
By using req.method()
Answer:
a) By defining specific methods (GET, POST, etc.) for the route
Explanation: Routes can be restricted to specific HTTP methods by
defining them with app.get(), app.post(), etc.
99. How do you send a
response with an HTTP status code in Express?
- a)
res.status(code).send()
- b)
res.sendStatus(code)
- c)
res.status(code)
- d)
res.statusCode(code)
Answer:
a) res.status(code).send()
Explanation: res.status() sets the status code, and .send() sends the
response.
100. How do you allow
your Express app to handle cross-origin requests?
- a)
By using the cors middleware
- b)
By using app.crossOrigin()
- c)
By setting headers manually in res
- d)
By using the express.allowCrossOrigin() method
Answer:
a) By using the cors middleware
Explanation: The cors middleware enables Cross-Origin Resource Sharing
(CORS), allowing your app to handle requests from other domains.
These 20 additional
questions complete the set of 100 MCQs on Express.js. Let me know if you need
more information!
4o mini
You said:
write lecture notes in
detail explanation for beginner student on following topic... Class 10:
Handling Forms with Express.js Objective: Learn to handle form submissions in
Node.js using Express. Lab Tasks: 1. Create a basic form in HTML. 2. Set up a
POST route to handle form submissions. 3. Use body-parser middleware to parse
form data.
ChatGPT said:
ChatGPT

No comments:
Post a Comment