Practice
1. What is the main purpose of using
morgan in an Express app?easy
Solution
Step 1: Understand Morgan's role
Morgan is a middleware that logs details about HTTP requests to the console or a file.Step 2: Compare options with Morgan's function
Only logging HTTP requests matches Morgan's purpose; other options relate to different tasks.Final Answer:
To log HTTP requests for monitoring server activity -> Option AQuick Check:
Logging HTTP requests = A [OK]
Hint: Morgan logs requests, not database or sessions [OK]
Common Mistakes:
- Confusing Morgan with session or static file middleware
- Thinking Morgan manages database connections
- Assuming Morgan serves files
2. Which of the following is the correct way to add Morgan middleware with the 'tiny' format in an Express app?
easy
Solution
Step 1: Recall Morgan usage syntax
Morgan is used as middleware by callingmorgan('format')insideapp.use().Step 2: Check each option's syntax
Onlyapp.use(morgan('tiny'))matches the correct syntax; others are invalid method calls or parameters.Final Answer:
app.use(morgan('tiny')) -> Option BQuick Check:
Use morgan('format') inside app.use() = D [OK]
Hint: Use morgan('format') inside app.use() exactly [OK]
Common Mistakes:
- Calling morgan as a method like morgan.tiny()
- Passing strings directly to app.use() without morgan()
- Using non-existent morgan.format() method
3. Given this Express code snippet, what will Morgan log when a GET request is made to '/'?
const express = require('express');
const morgan = require('morgan');
const app = express();
app.use(morgan('dev'));
app.get('/', (req, res) => res.send('Hello'));
app.listen(3000);medium
Solution
Step 1: Identify the HTTP method and route
The code handles GET requests to '/', so a GET / request is valid and returns 200 status.Step 2: Understand Morgan 'dev' format output
The 'dev' format logs method, URL, status code, response time, and response size roughly like 'GET / 200 5 - 0.123 ms'.Final Answer:
GET / 200 5 - 0.123 ms -> Option AQuick Check:
GET / with 200 status logs as in B [OK]
Hint: GET '/' with 'dev' logs method, URL, status, time [OK]
Common Mistakes:
- Confusing POST with GET method
- Assuming 404 status for existing route
- Expecting error from Morgan format
4. You added Morgan to your Express app with
app.use(morgan('combined')), but no logs appear in the console. What is the most likely cause?medium
Solution
Step 1: Understand middleware order importance
Express runs middleware in order. If Morgan is added after routes, requests may not pass through it.Step 2: Check Morgan format and behavior
'combined' is a valid format; Morgan logs all requests, not just errors; it does not need a database.Final Answer:
Morgan middleware is added after route handlers -> Option CQuick Check:
Middleware order matters; Morgan must be before routes [OK]
Hint: Add Morgan before routes to see logs [OK]
Common Mistakes:
- Thinking 'combined' format is invalid
- Believing Morgan logs only errors
- Assuming Morgan needs a database
5. You want to log HTTP requests only if the response status is 400 or higher using Morgan. Which code snippet correctly achieves this?
hard
Solution
Step 1: Understand Morgan's skip option
The 'skip' option is a function that returns true to skip logging that request.Step 2: Apply condition to skip requests with status below 400
To log only 400 or higher, skip requests where statusCode is less than 400.Step 3: Verify other options
'filter' and 'only' are not valid Morgan options; app.use(morgan('combined', { skip: (req, res) => res.statusCode >= 400 })) skips 400+ which is opposite of desired.Final Answer:
app.use(morgan('combined', { skip: (req, res) => res.statusCode < 400 })) -> Option DQuick Check:
Skip if status < 400 to log 400+ [OK]
Hint: Use skip to ignore status below 400 [OK]
Common Mistakes:
- Using skip condition backwards
- Using invalid options like filter or only
- Confusing skip with logging condition
