How to define Mock API routes and middleware
MockServer works by allowing you to define API routes using mock
object. mock is a global Express.js app automatically created by the underlying apigit mock server framework. You can define routes using mock.[method](...)
, following the guidelines provided in the Express.js documentation.
Here’s an overview of how MockServer simplifies creating APIs:
- Use
mock.[method](path, callback [, callback ...])
to define routes and request handlers. - Use
mock.use([path,] callback [, callback...])
to add middlewares. - In the callback functions, please just use standard
Express.js
props likereq
andres
to handle HTTP requests and responses.
Example: Defining Routes and Middleware
The following example shows how easy it is to create routes using MockServer:
mock.get("/user/:name", function (req, res) {
return res.status(200).send("hello" + req.params.name);
});
mock.post('/test-urlencoded', (req, res) => {
console.log('Received x-www-form-urlencoded data:', req.body);
res.status(200).send({ message: 'Received x-www-form-urlencoded data', data: req.body });
});
mock.get('/testauth', exampelAuthMiddleware, (req, res) => {
res.status(200).send('This route is to deomostrate auth through middleware ');
});
mock.get('/testmd2', firstMiddleware, secondMiddleware, (req, res) => {
res.status(200).send('This route has multiple middlewares!');
});
Example: Middleware
Just like routes definition, you can use middleware to process requests before they reach the final route handler:
const exampelAuthMiddleware = (req, res, next) => {
const authHeader = req.headers['authorization'];
if (!authHeader) {
return res.status(401).send('Authorization header missing');
}
const token = authHeader.split(' ')[1];
if (!token) {
return res.status(401).send('Token missing');
}
try {
const SECRET_KEY = 'your-secret-key';
const decoded = jwt.verify(token, SECRET_KEY);
req.user = decoded;
next();
} catch (err) {
return res.status(403).send('Invalid token');
}
};
function firstMiddleware(req, res, next) {
console.log('First middleware');
next();
}
function secondMiddleware(req, res, next) {
console.log('Second middleware');
next();
}
mock.use((req, res, next) => {
console.log("middware for all routes");
next();
});
mock.get('/testauth', exampelAuthMiddleware, (req, res) => {
res.status(200).send('This route is to deomostrate auth through middleware ');
});
mock.get('/testmd2', firstMiddleware, secondMiddleware, (req, res) => {
res.status(200).send('This route has multiple middlewares!');
});
The mock.use()
function can be used to define middleware for all routes or specific paths, just like in an Express app.
Working with Requests and Responses
MockServer provides a simple way to interact with requests and responses using standard Express.js conventions. Below are some examples of common tasks:
Handling Route Parameters and Query Parameters
mock.get('/repository/:user/:repo', (req, res) => {
const { user, repo } = req.params;
res.json({
message: 'Repository Details',
user: user,
repo: repo
});
});
mock.get('/search', (req, res) => {
const { keyword, page, limit } = req.query;
res.json({
message: 'Search Parameters Received',
keyword: keyword || 'none',
page: page ? parseInt(page, 10) : 1,
limit: limit ? parseInt(limit, 10) : 10
});
});
Setting Response Status and Headers
mock.get('/not-found', (req, res) => {
res.status(404).json({
message: 'Resource not found',
code: 404
});
});
mock.get('/single-header', (req, res) => {
res.set('Content-Type', 'application/json');
res.set('X-Custom-Header', ['value1', 'value2']);
res.json({ message: 'Headers set successfully!' });
});
For more information, please check the official Express.js documentation.