Cherry is a lightweight framework to quickly generate a web server
Use the package manager npm to install Cherry.
npm install @lund-org/cherry
Checkout the example in the example folder.
For the development : To use the https mode, you need to generate the ssl keys, you can use this command in the config folder :
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/C=FR/ST=./L=./O=./OU=./CN=."
Warning : It doesn't work on Windows, you will only get the key.pem with this command. Let's find the way to do it on stackoverflow 😂
You can hook some events and retrieve informations. It is useful to add some code at specific moment of the workflow.
Hook Name | Data sent |
---|---|
beforeStartServer | { cherry: <Cherry>, server: <CherryHTTPSServer or CherryHTTPServer> } |
afterStartServer | { cherry: <Cherry>, server: <CherryHTTPSServer or CherryHTTPServer> } |
beforeStopServer | { cherry: <Cherry>, server: <CherryHTTPSServer or CherryHTTPServer> } |
afterStopServer | { cherry: <Cherry>, server: <CherryHTTPSServer or CherryHTTPServer> } |
beforeStartOrm | { cherry: <Cherry>, orm: <The ORM plugin instance> } |
afterStartOrm | { cherry: <Cherry>, orm: <The ORM plugin instance> } |
beforeStopOrm | { cherry: <Cherry>, orm: <The ORM plugin instance> } |
afterStopOrm | { cherry: <Cherry>, orm: <The ORM plugin instance> } |
beforeProcess | { request: <CherryIncomingMessage>, response: <CherryServerResponse>, middlewares: <Array<Function>> } |
afterProcess | { request: <CherryIncomingMessage>, response: <CherryServerResponse>, processResult: <The return value of the callback> } |
There is 2 types of route, the public folders to retrieve raw resources and the configured routes.
Route Name | Description | Options |
---|---|---|
PUBLIC_ROUTE_PUBLIC_FOLDER | The folder where we will find a resource. It's an entrypoint, it means that if you request a route /my/route.html, if you have it as a configured route and the same path available in your public folder, it will retrieve the file in the public folder and then quit |
path : The absolute path of the folder priority (optionnal) : The priority of check |
Route Name | Description | Options |
---|---|---|
ROUTE_CONTEXT | A wrapper of routes which allows to avoid to set the same thing for a bunch of routes. For example, if you have an admin, you will have a middleware to check the authentication and the rights of the user. To not set it to every routes, you can put in on the ROUTE_CONTEXT and it will apply to subsequent routes |
type : The type of route, here ROUTE_CONTEXT collection : The array of subroutes name (optionnal) : The name of the route which will be added before the name of the subroutes method (optionnal) : The default HTTP method of the subroute, can be overriding path (optionnal) : The leading path which will be added before the path of the subroutes middlewares (optionnal) : The middlewares to execute for each subroutes rules (optionnal) : The rules for route parameters if there is some in the path |
ROUTE | A configured route which will execute your code when requested | type : The type of route, here ROUTE path : The path of the route callback : The method to execute when the route is requested name (optionnal) : The name of the route. It can be useful to detect it in a hook method (optionnal) : The HTTP method of the route, it overrides the value set in the context (if present) middlewares (optionnal) : The middlewares to execute before accessing to the callback rules (optionnal) : The rules for route parameters if there is some in the path |
- Debug mode (logger)
- Builtin helpers
- Enhance the release and deployment workflow
- Manage the form-data calls (+ file upload)
- Default 4xx - 5xx pages
- Manage optionnal parameters in the routes
- Manage redirections
- Cherry Handlebars connector : The plugin which uses handlebars as the view engine
- Cherry Pug connector : The plugin which uses pug as the view engine
- Cherry Typeorm connector : The plugin which uses typeorm as the database-orm engine
- Cherry Sequelize connector : The plugin which uses sequelize as the database-orm engine
- Livedeck-server : This project is the core of the livedeck project. It's the central point between the web/smartphone client and the software client. Like a bridge but with a database.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.