Rest api library for your mongoose apps, with react ui: mongoose-restapi-ui-component react library
npm install mongoose-restapi-uiGET /model (with querystring for each path, with additional parameters: $any: any colum, $sortBy: sort by a column, $sort: asc or desc and $page: number page)
GET /model/:_id
GET /model/:name
POST /model
PUT /model/:_id
PUT /model/:name
DELETE /model/:_id
DELETE /model/:name
js
import { ApiRouter } from 'mongoose-restapi-ui'
const customer = model('Customer', new Schema({
name: { type: String, required: true },
comment: { type: String }
}))
router.setModel('/customer', customer)
app.use('/', router)
`
In order to use on a different path, mark it on our ApiRouter
`js
...
router.setGlobalRoute('/api/config')
...
router.setModel(...
router.setModel(...
app.use('/api/config', router)
`
Publish UI:
`js
app.get('/api/ui', router.publishUiTree())
`
(Note that publishUI method don't need the global path, can be published on other site and accepts an optional parameter express.Router that will be switched if there are provided. If not are provided there are all models and UI on the same router.)
$3
The library needs to pass your mongoose connection, and a middleware in order to get the user. Here an example:
Typescript:
`js
import * as express from 'express'
import { ApiRouter } from 'mongoose-restapi-ui'
import { model, Schema, connect } from 'mongoose'
connect('mongodb://localhost:27017/dummyDatabase')
const customer = model('Customer', new Schema({
name: { type: String, required: true },
comment: { type: String }
}))
const app = express()
const router = ApiRouter()
router.use((req, res, next)=>{
req.user = // your mongoose user document....
next()
})
router.setModel('/customer', customer)
router.setConnection(mongoose) // or object returned from mongoose.connect
app.use('/', router)
app.listen(3000)
`
Javascript:
`js
const express = require('express')
const { model, Schema, connect } = require('mongoose')
const { ApiRouter } = require('mongoose-restapi-ui')
connect('mongodb://localhost:27017/dummyDatabase')
const customer = model('Customer', new Schema({
name: { type: String, required: true },
comment: { type: String }
}))
const app = express()
const router = ApiRouter()
router.use((req, res, next)=>{
req.user = // your mongoose user document....
next()
})
router.setModel('/customer', customer)
router.setConnection(mongoose) // or object returned from mongoose.connect
app.use('/', router)
app.listen(3000)
`
UI integration
Use react component mongoose-restapi-ui-component.
API
Default object is an extended express Router, please initialize as express Router. (Default mongodb api is v3.x)
`js
import ApiRouter from 'mongoose-restapi-ui'
const router = ApiRouter()
`
If your database is MongoDB 4.X, this library can use his new API ($any can filter numbers, _id, dates... as a contains)
`js
import ApiRouter from 'mongoose-restapi-ui'
const router = ApiRouter({isMongo4: true})
``
| Name | Type | Description |
|---|---|---|
setGlobalRoute(path) |
path: string |
witch for nexts models that their api starts in path path. |
setModel(route, model [, options]) |
route: stringmodel: mongoose.Modeloptions: ServeOptionsreturns EventEmitter |
Set model model on path route from the router. Generates GET, POST, PUT, PATCH and DELETE methods.
Returns an EventEmitter that emits the following events:
|
ServeOptions |
{name: stringgetFilterByPermissions: FilterByPermissionshasAddPermission: RequestPermissionhasEditPermission: RequestPermissionhasUpdatePermission: RequestPermissionhasDeletePermission: RequestPermission} |
Switch path name as the name label for UI purpose as complex objects. |
FilterByPermissions(req, callback) |
req: express.Requestcallback: FilterByPermissionsCallback |
Function in order to get a pre-filter query (query), for a custom permissions setup. |
FilterByPermissionsCallback(err, query) |
err: Errorquery: Object |
Callback called in order to get a pre-filter query (query), for a custom permissions setup. |
| IUser | must be extend: { roles: ObjectId } & mongoose.Document | User used in order to set permissions and roles. |
RequestPermission(user, doc, callback) |
user: IUserdoc: mongoose.Documentcallback: RequestPermissionCallback |
called on interaction with an endpoint rest (post, put, patch or delete) |
RequestPermissionCallback(error, hasPermission, reason?) |
error: ErrorhasPermission: Booleanreason?: string |
Will be called in order to custom permissions.
Will be called second callback parameter with true or false as result of permission check.
If there are provided the third parameter of callback and false are provided as result, will be sended it as custom statusText with status 403. |