NodeJS package that integrate API for @knovator/masters-node in nodejs application
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
@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.
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.
- 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:https://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}`);
});
- Install library
npm install @knovator/masters-node # or yarn add @knovator/masters-node
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) => {...}
}));
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
Response follows following structure
{
code: RESPONSE_CODES,
message: "" // if internationalized is applied
data: {}
}
Code | Description |
---|---|
SUCCESS | When request fullfiled without error |
ERROR | When request fullfiled with error |
Message | Description |
---|---|
Master exists | When master/submaster with same code is exist in database |
HTTP | Description |
---|---|
200 | When request fullfiled without error |
201 | When document is created |
500 | When internal server occurred |
422 | When Validation error occurred |
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 |
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 |
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.
@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.
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
Distributed under the MIT License. See LICENSE.txt
for more information.
Knovator Technologies
- Twitter @knovator
- Web https://knovator.com/
Project Link: https://github.com/knovator/masters-node