@knovator/masters-node
v2.3.0
Published
NodeJS backend for @knovator/masters
Downloads
72
Readme
About The Project
@knovator/masters-node
is built with intent to faster development cycle by providing plug & play facility for masters/submasters, that is used almost on every project.
Built With
Getting Started
To integrate @knovator/masters-node
, you should be having basic nodejs
application up and running with express
(optionally using mongoose
for mongodb
database). @knovator/masters-node
add routes for masters in application.
Prerequisites
- It's good start to have
nodejs
application up and running withexpress
(optionally usingmongoose
formongodb
database). Good to have used i18next to add message in response codes. routes
usesmongoose
connection established by application, so it's required to connect to database before using package. Example,// db.js const mongoose = require('mongoose'); mongoose .connect('mongodb://localhost:27017/knovator') .then(() => console.info('Database connected')) .catch((err) => { console.error('DB Error', err); }); module.exports = mongoose;
- Image upload route for
upload
&remove
is needed to declare externally. Example,// fileRoute.js const express = require('express'); const router = express.Router(); router.post(`/files/upload`, (req, res) => { // TO DO: some file storage operation let uri = "/image.jpg"; let id = "62c54b15524b6b59d2313c02"; res.json({ code: 'SUCCESS', data: { id, uri }, message: 'File uploaded successfully' }); }); router.delete(`/files/remove/:id`, (req, res) => { // TO DO: some file remove operation res.json({ code: 'SUCCESS', data: {}, message: 'File removed successfully' }) }) module.exports = router;
Sample App file
require('./src/db');
require('./src/models/file');
const cors = require('cors');
const express = require("express");
const fileRoutes = require('./fileRoute.js');
const PORT = 8080;
const app = express();
app.use(cors());
app.use(express.static("public"));
app.use(fileRoutes);
// ...
app.listen(PORT, () => {
console.log(`App started on ${PORT}`);
});
Installation
- Install library
npm install @knovator/masters-node # or yarn add @knovator/masters-node
Usage
App/Main file is a good place to use @knovator/masters-node
...
const { masters } = require('masters-node');
// ...
app.use("/admin/masters", masters());
app.listen(PORT, () => {
console.log(`App started on ${PORT}`);
});
Masters package allows providing authentication
, logger
and catchAsync
functions as parameters.
app.use("/admin/masters", masters({
authentication: (req, res, next) => {...},
logger: console,
catchAsync: (function) => (req, res, next) => {...}
}));
parameter explanations
authentication
- Provides ability to add authentication to routes
// default (_req, _res, next) => { return next(); }
- Provides ability to add authentication to routes
logger
- Provides ability to add logging for Database and Validation
// default console
- Provides ability to add logging for Database and Validation
catchAsync
- Wraps functions to handle async errors
// default function catchAsync(fn) { return function (req, res, next) { Promise.resolve(fn(req, res, next)).catch((err) => { // this.logger.error(err.message); res.status(internalServerError).json({ code: RESPONSE_CODE.ERROR, message: err.message, data: {}, }); }); }; }
- Wraps functions to handle async errors
Routes Infomration
Response follows following structure
{
code: RESPONSE_CODES,
message: "" // if internationalized is applied
data: {}
}
Response Codes
| Code | Description | | --- | ----------- | | SUCCESS | When request fullfiled without error | | ERROR | When request fullfiled with error |
Custom Validation messages
| Message | Description | | --- | ----------- | | Master exists | When master/submaster with same code is exist in database |
HTTP Status Codes
| HTTP | Description | | --- | ----------- | | 200 | When request fullfiled without error | | 201 | When document is created | | 500 | When internal server occurred | | 422 | When Validation error occurred |
Routes
| Route | Description |
| --- | ----------- |
| /create
| Creates Master/SubMaster record |
| /update:id
| Updates Master/SubMaster record |
| /partial-update/activate/:id
| Turn on/off isActive
field based on body data |
| /partial-update/default/:id
| Turn on/off isDefault
field based on body data |
| /partial-update/web-visible/:id
| Turn on/off isWebVisible
field based on body data |
| /partial-update/sequence/:id
| Sets sequence of record with :id
, and updates affected records sequence |
| /delete
| Delete the record whose id
send in body |
i18n
code for messages
Nextjs i18n package adds facility for internationalization in nodejs application, and it's used in following mannerr
// usage
req?.i18n?.(CODE)
| CODE | Description |
| --- | ----------- |
| (master/submaster).create
| When record is created |
| (master/submaster).update
| When record is updated |
| (master/submaster).activate
| When isActive
is set to true |
| (master/submaster).deactivate
| When isActive
is set to false |
| (master/submaster).display
| When isWebVisible
is set to true |
| (master/submaster).notDisplay
| When isWebVisible
is set to false |
| (master/submaster).default
| When isDefault
is set to true |
| (master/submaster).notDefault
| When isDefault
is set to false |
| submaster.seq
| When sequence is updated |
| (master/submaster).delete
| When delete is performed |
| (master/submaster).findAll
| When all data is fetched |
| (master/submaster).notFound
| When Master/Submaster data is not found |
descriptor
codes
| Code | Description |
| --- | ----------- |
| master.create
| For Create API |
| master.update
| For Update API |
| master.active
| For isActive
toggle API |
| master.default
| For isDefault
toggle API |
| master.webVisible
| For isWebVisible
toggle API |
| master.sequence
| For sequence
update API |
| master.softDelete
| For Soft-Delete API |
| master.list
| For List API |
- You can prefix descriptors by adding
MASTERS_DESCRIPTOR_PREFIX
in environment variables.
Usecases
@knovator/masters
is combination of two packages @knovator/masters-admin
and @knovator/masters-admin
. It is designed plug and play masters module in your project. It is useful in following cases:
- Your app needs master, submaster facility to build things like
state
withcity
,experiences
withskills
,categories
withsubcategories
etc. - You want to let admin manage masters and submasters data from admin panel.
- You want to show masters and submasters data somewhere in your app.
If you have any other usecase, please open an issue with tag usecase
. We will try to add it in our roadmap.
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the MIT License. See LICENSE.txt
for more information.
Contact
Knovator Technologies
- Twitter @knovator
- Web https://knovator.com/
Project Link: https://github.com/knovator/masters-node