Arrow Express
Aim of this library is to make express applications bootstrapping easy and fast with zero configuration.
Main principles:
- Use arrow functions :)
- Avoid adding complex configuration, lib will work out of the box
- Focus on clean functional programming, avoid usage of complex additional configuration ideas like decorators etc.
- Flexibility and ease of use
Installation
To install package use command:
npm install arrow-express
Example code
import Express from 'express';
import Compression from 'compression';
import cors from 'cors';
import {Application, Controller, Route} from 'arrow-express';
const ExpressApp = Express();
ExpressApp.use(Express.json());
ExpressApp.use(Compression());
ExpressApp.use(cors());
Application({
port: 8080,
app: ExpressApp
}).registerController(
Controller()
.prefix('users')
.registerRoutes(
Route()
.method('get')
.handler(
(req) => getUser(req.body.id)
),
Route()
.method('post')
.path('create')
.handler(
(req) => createUser(req.body.id)
)
),
).start();
Docs
Application
Point of start for every application.
Here you can configure Express application or port used by your application.
Application Methods
registerController
- register controller in application.start
- starts application, register controllers routes in express app and connect to configured port
Example usage of Application
Application({
port: 8080,
app: Express(),
})
.start();
Controller
Controller is used to manage group of routes.
Example usage of Controller
import {Application, Controller} from 'arrow-express';
function LoginController () {
return Controller()
.prefix('login');
}
function UserController () {
return Controller()
.prefix('user');
}
Application({port: 8080})
.registerControllers(
LoginController(),
UserController(),
)
.start();
Controller Methods
prefix
- register controller prefix which will be used by all routesregisterRoute
- register route in controller
Route
Route is used to manage route handling.
Example usage of route
import {Application, Controller, Route} from 'arrow-express';
function CheckToken (): UserId {
return userId;
}
function getUserRoute() {
return Route()
.method('get')
.path('myself')
.contextGuard(CheckToken)
.handler(async (req: Express.Request, res: Express.Response, userId: UserId) => {
return user;
});
}
function LoginController () {
return Controller()
.prefix('user')
.registerRoutes(
getUserRoute()
);
}
Application({port: 8080})
.registerController(
LoginController(),
)
.start();
Route Methods
method
- register method used for routepath
- register path of route alongside with prefix it is used to create full pathhandler
- set request handler, here you can handle requestcontextGuard
- used to add pre-checks or side operations for request if guard throw error, handler is not called
Route handler
Route handler receive 3 arguments:
request
- which is Express.Request for pathresponse
- which is Express.Responsecontext
- which is optional context returned by last guard
Features of route handler:
- Route handler can return Promise or Object which will be send back with response code 200.
- Route handler can also send response itself using
res
then library won't try to send result pf handler. - Route handler can also setup custom response code then arrow-express won't override it.
- If route handler will throw RequestError, RequestError will be used to send back desired response.
Route Guard
Route Guard receive 2 arguments:
request
- which is Express.Request for pathresponse
- which is Express.Response
Route Guard can return context which can be used in handler later.
If route guard throw error route handler won't be called.