Q1. What is middleware in Express.js?
Middleware functions are functions that have access to the request (req), response (res), and the next middleware function (next) in the application's request-response cycle. They can execute code, modify req/res, end the request, or call next(). They are the building blocks of Express applications.
Q2. What are the types of middleware in Express?
There are several types: Application-level middleware (bound to app using app.use()), Router-level middleware, Built-in middleware (express.json(), express.static()), Error-handling middleware (takes four parameters), and Third-party middleware (like body-parser, cors).
Q3. How does the middleware execution flow work?
Middleware executes in the order they are defined. Each middleware must either send a response or call next() to pass control to the next middleware. If a middleware doesn't call next() and doesn't send a response, the request hangs. The flow is like a pipeline.
Q4. What is the purpose of the next() function?
next() passes control to the next middleware function. If you pass an argument to next(), like next(err), Express treats it as an error and skips to error-handling middleware. Without calling next(), the request-response cycle stops at that middleware.
Q5. Can middleware be applied to specific routes?
Yes, you can pass middleware as arguments to route methods. Example: app.get('/profile', authenticate, (req, res) => {...}). Here authenticate is a middleware that runs only for this specific route. You can also chain multiple middleware functions.
