Router Utilities
When you develop custom APIs in router.[js|ts] files, you might need to use some utilities to standardize your responses, handle errors, and manage pagination. The following utilities are available to help you with these tasks.
Reply
create(
status,detail):ResponseObject
Creates a response object with the given status and detail.
Example
import { reply } from '@modular-rest/server';
// inside the router
const response = reply.create("s", { message: "Hello, world!" });
ctx.body = response;
ctx.status = 200;Parameters
| Parameter | Type | Description |
|---|---|---|
status | ResponseStatus | The status of the response. Can be "s" for success, "f" for fail, or "e" for error. |
detail | Record<string, any> | The detail of the response. Can contain any additional information about the response. |
Returns
The response object with the given status and detail.
Paginator Maker
create(
count,perPage,page):PaginationResult
Creates a pagination object based on the given parameters.
Example
import { paginator } from '@modular-rest/server';
const pagination = paginator.create(100, 10, 1);
// json response will be like this
// {
// pages: 10,
// page: 1,
// from: 0,
// to: 10,
// }Parameters
| Parameter | Type | Description |
|---|---|---|
count | number | The total number of items to paginate. |
perPage | number | The number of items to display per page. |
page | number | The current page number. |
Returns
An object containing pagination information.
Auth Middleware
auth(
ctx,next):Promise<void>
Authentication middleware that secures routes by validating user tokens and managing access control.
This middleware performs several key functions:
- Validates that the incoming request contains an authorization token in the header
- Verifies the token is valid by checking against the user management service
- Retrieves the associated user object if the token is valid
- Attaches the authenticated User object on ctx.state.user for use in subsequent middleware/routes
- Throws appropriate HTTP errors (401, 412) if authentication fails
The middleware integrates with the permission system to enable role-based access control. The attached user object provides methods like hasPermission() to check specific permissions.
Common usage patterns:
- Protecting sensitive API endpoints
- Implementing role-based access control
- Getting the current authenticated user
- Validating user permissions before allowing actions
Example
// Inside the router.ts file
import { auth } from '@modular-rest/server';
import { Router } from 'koa-router';
const name = 'flowers';
const flowerRouter = new Router();
flowerRouter.get('/list', auth, (ctx) => {
// Get the authenticated user
const user = ctx.state.user;
// Then you can check the user's role and permission
if(user.hasPermission('get_flower')) {
ctx.body = 'This is a list of flowers: Rose, Lily, Tulip';
} else {
ctx.status = 403;
ctx.body = 'You are not authorized to access this resource';
}
});
module.exports.name = name;
module.exports.main = flowerRouter;Parameters
| Parameter | Type | Description |
|---|---|---|
ctx | Context | Koa Context object containing request/response data |
next | Next | Function to invoke next middleware |
Returns
Promise<void>
Throws
401 - If no authorization header is present
Throws
412 - If token validation fails