Create an Express app that proxies /api/users requests to a user service running on port 3001.
Express
Hint
Use app.use with createProxyMiddleware. The target is the downstream service URL. pathRewrite strips the /api/users prefix.
Add authentication middleware before proxying
Add a JWT verification middleware that runs before any proxy routes. If the token is invalid, return 401. If valid, attach the decoded user to the request headers.
Express
Hint
Place app.use(authMiddleware) before the proxy routes. Extract the token from the Authorization header, verify it with jwt.verify, and attach decoded info as custom headers.
Add a second proxy route and rate limiting
Add a proxy route for /api/orders pointing to port 3002. Add rate limiting at the gateway level to allow max 100 requests per 15 minutes per IP.
Express
Hint
Create a limiter with express-rate-limit and app.use it before the proxy routes. Add a second createProxyMiddleware for /api/orders targeting port 3002.
Create a response aggregation endpoint
Create a /api/dashboard endpoint that fetches data from both the user service and orders service in parallel and returns a combined response.
Express
Hint
Use Promise.all to fetch from both services in parallel. Forward the x-user-id header so downstream services know which user is requesting. Wrap in try/catch and return 502 on failure.
Practice
(1/5)
1. What is the primary role of an API gateway in a system using Express?
easy
A. It directly serves static files to users.
B. It stores all the data for the application.
C. It acts as a single entry point to route requests to multiple backend services.
D. It replaces the database in the backend.
Solution
Step 1: Understand the role of API gateway
An API gateway acts as a single entry point that routes client requests to appropriate backend services.
Step 2: Eliminate incorrect roles
Storing data, replacing databases, or serving static files are not responsibilities of an API gateway.
Final Answer:
It acts as a single entry point to route requests to multiple backend services. -> Option C
Quick Check:
API gateway = single entry point [OK]
Hint: API gateway routes requests centrally [OK]
Common Mistakes:
Thinking API gateway stores data
Confusing API gateway with database
Assuming it serves static files directly
2. Which Express middleware is commonly used to forward requests in an API gateway setup?
easy
A. http-proxy-middleware
B. express.static()
C. body-parser
D. cors
Solution
Step 1: Identify middleware for proxying requests
The http-proxy-middleware package is used to forward requests from the gateway to backend services.
Step 2: Differentiate from other middleware
express.static() serves static files, body-parser parses request bodies, and cors manages cross-origin requests, none forward requests.
Final Answer:
http-proxy-middleware -> Option A
Quick Check:
Proxy middleware = http-proxy-middleware [OK]
Hint: Proxy requests with http-proxy-middleware [OK]
Common Mistakes:
Using express.static() to proxy requests
Confusing body-parser with proxying
Assuming cors forwards requests
3. Given this Express API gateway code snippet, what will be the output when a client requests /api/users?
A. Missing changeOrigin: true causes backend to reject requests
B. The target URL is incorrect and unreachable
C. The middleware is not mounted on the correct path
D. Express app is not listening on port 3000
Solution
Step 1: Check proxy middleware options
Without changeOrigin: true, the Host header sent to backend remains the gateway's, which may cause backend to reject requests.
Step 2: Verify other parts
The target URL and path are correct, and app listens on port 3000, so those are not errors.
Final Answer:
Missing changeOrigin: true causes backend to reject requests -> Option A
Quick Check:
changeOrigin fixes Host header issues [OK]
Hint: Add changeOrigin: true to fix backend rejection [OK]
Common Mistakes:
Ignoring changeOrigin option
Assuming wrong target URL without checking
Thinking app.listen is missing
5. You want to design an Express API gateway that routes requests to multiple backend services and also logs each request's method and URL. Which approach best fits this requirement?
hard
A. Use only express.static() to serve all backend services and log requests.
B. Use http-proxy-middleware for routing and add a custom middleware before it to log requests.
C. Implement routing logic inside each backend service and skip the gateway.
D. Use body-parser middleware to route and log requests.
Solution
Step 1: Identify routing and logging needs
The API gateway must route requests to multiple backends and log method and URL of each request.
Step 2: Choose appropriate middleware
http-proxy-middleware handles routing, and a custom Express middleware can log requests before proxying.
Step 3: Eliminate incorrect options
express.static() serves static files only, backend routing skips gateway, and body-parser parses bodies but does not route or log.
Final Answer:
Use http-proxy-middleware for routing and add a custom middleware before it to log requests. -> Option B