UNPKG

webnjs

Version:

The NodeJS framework for developing sophisticated web-based solutions.

227 lines (171 loc) 4.63 kB
# Standards ## HTTP Responses Each entity controller should generally support at least these 4 requests: - `GET` - `POST` - `PUT` - `DELETE` Ofcourse there are scenarios where not all 4 are needed. Or scenarios where even more that 4 handlers are specified. But generally in the context of an entity like '*Item*', '*Post*' or '*Team*' it will be very useful to have these methods. --- ## Routes You can add an endpoint like this: `"<method> <path>": "<controller>.<handler>",` So a routing file could look like this for example: ``` { "endpoints": { "GET /post": "PostController.show", "PUT /post": "PostController.update" "DELETE /post": "PostController.destoy" "Post /authentication/login": "AuthenticationController.login", } } ``` ## Routing file A routing file generally has 3 properties. `domains`, `middleware` and `endpoints`. ``` { "domains": [ Array ] "middleware": [ Array ] "endpoints": { Object } } ``` So a routing file could look like this for example: ``` { "domains": [ "localhost", "www.example.com", "api.example.com" ] "middleware": [ "Localised", "Authentication" ] "endpoints": { "GET /login": "AuthenticationController.login", "GET /register": "AuthenticationController.register" } } ``` The properties `domains` & `middleware` are not required. If you omit them `domains` will default to `["*"]` and `middleware` will default to `[]`. --- ## Controller handlers (DEPRECATED) At the top of each controller handler you should have an `onSuccess` function and an `onFailure` function. The `onSuccess` should be called when your handler is able to serve what it was asked to serve. ``` const onSuccess = ({ results }) => { response.json({ success: true, data: results }); }; ``` The `onFailure` should be called when your handler is unable to serve what it was asked to serve. ``` const onFailure = ({ message, errors }) => { response.json({ success: false, message: message || "Unable to fetch records.", errors: errors }); } ``` ## Errors These are errors you should implement in your application: - `databaseError` - `accessDenied` - `illegalOperation` Ofcourse if none of these fit your use-case you should add custom errors. # Examples ## HTTP Responses This is how these responses should be generally formatted: `GET /*/index` Successful response: ``` { success: true, data: [ { ID: 123, code: "ABC", description: "Multiple records must be encapsulated in an array", createdAt: 1570744800, modifiedAt: null }, { ID: 124, code: "ABD", description: "Example record 2.", createdAt: 1570744801, modifiedAt: null } ] } ``` `GET /*/show` Successful response: ``` { success: true, data: { ID: 125, code: "ABE", description: "Single record that is not encapsulated in an array", createdAt: 1570744802, modifiedAt: null } } ``` Failed response: ``` { success: false, message: "Unable to fetch Record", errors: [ { error: "accessDenied", message: "Access denied" } ] } ``` `POST /*/store` Successful response: ``` { success: true, message: "Record was saved!" } ``` Failed response: ``` { success: false, message: "Unable to save Record!", errors: [ { error: "databaseError", message: "Database error" } ] } ``` ## Regular entity setup: `class Post extends AFModel {}` `class PostController extends AFController {}` *Routes:* `GET /post` // Used to display all posts or a specific post if an 'ID' is specified in the body. `POST /post` // Used to create a post `PUT /post` // Used to update a post `DELETE /post` // Used delete a post ## Exceptional entity setup: `class User extends AFModel {}` `class UserController extends AFController {}` *Routes:* `GET /user/show` // Used to display another user's profile `GET /user/profile` // Used to display the user's own profile `POST /user/login` // Used to log a user in `POST /user/register` // Used to create a user account `PUT /user/forget` // Used to set the account to be deleted after 15 days