๐ Content management API for integrating with NodeJS Express(backend) and Prisma(ORM)
- ๐ Easy to use: Easy to install in your project.
- โ ES6+ && TS: TypeScript and ES6+ support(JS).
- ๐ฆ Required dependencies: You don't need what you won't use: express and prisma.
- ๐ต Free: It's free and always will be, the beauty of open source.
Take in mind that this solution is for when you want to control your own backend and frontend, but do not want to have struggle to create a cms with all the routes and schemas and database handlers that come with it.
When you are looking for a full cms solution, we recommend strapi or changing languages and taking wagtail for python.
To use this package, install using npm
, yarn
or pnpm
๐ฅ:
# npm
npm install @jetvil/cm-api
# yarn
yarn add @jetvil/cm-api
# pnpm
pnpm install @jetvil/cm-api
const express = require("express");
const { PrismaClient } = require("@prisma/client");
const jetvil = require("@jetvil/cm-api");
// prisma with eg. postgresql and schemas: "user" and "post"
const prisma = new PrismaClient(); // Prisma ORM, you must have it installed and generated.
const app = express();
const jetvil = jetvil();
app.use(express.json()); // for parsing application/json.
jetvil.setClient(prisma); // Set prisma client here or pass it in the router() method.
const router = jetvil.router(); // Empty by default, you can configure it by passing an object.
app.use("/api", router);
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
// Routes such as /user and /post will be available at /api/user and /api/post
You can configure the router by passing an object to the router() method.
By doing so you can adjust the routes to your needs.
const jetvil = require("@jetvil/cm-api");
const jetvil = jetvil();
const router = jetvil.router({
client: prisma, // Prisma ORM, you must have it installed and generated.
global: {
schemas: ["user", "post", "profile"], // if specified, only these schemas will be available.
methods: ["get", "post", "put", "delete", "fake"], // if specified, only these methods will be available, 'fake' will not be used.
middleware: [
{
methods: ["get"], // Method to which the middleware will be applied.
schemas: ["user"], // Schema to which the middleware will be applied.
handler: (req, res, next) => {
// Middleware function.
next();
},
},
],
},
config: {
// note how the schema is the key and the value is an object with the schema config.
// these are overrides for the global config on a per schema basis.
user: {
methods: ["get", "post", "put"], // note how the delete method is not included.
actions: ["read", "create", "update", "delete"], // these actions determine what the user can do with the schema.
// for example, if the user has the 'read' action, he can only read the schema.
// when the 'filter' action is included, the user can filter the schema on the schema.
middleware: [
// this middleware will override the global middleware for the user schema.
{
handler: (_req, _res, next) => {
console.log("Middleware applied to user schema!");
next();
},
},
],
},
},
verbose: true, // If true, the router will log the routes it generates.
});
As of this moment, the documentation is not yet available, but it will be soonโณ
Found a bug๐ฆ? or want to suggest a new feature๐? or just want to help๐?
Feel free to open an issue or a pull request.
Contributions are always welcome!๐
- Fork the project here.
- Create a new branch like this:
git checkout -b feature/featureName
. - Commit your changes to your branch:
git commit -m 'Create AwesomeFeature'
โ๏ธ. - Push your branch:
git push origin feature/featureName
. - Open a pull request on the
dev
branch here๐.
๐Note: Make sure to add tests for your changes โ .