1.8.0 • Published 5 years ago

mongoose-restapi-ui v1.8.0

Weekly downloads
9
License
MIT
Repository
github
Last release
5 years ago

Mongoose API Generator with UI embedded

npm version Build Status NPM Status codecov.io Donate

This package provides a Rest API for your mongoose models, with the following endpoints:

  • GET /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

Usage

Use our router extended from express with our custom methods:

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

...
router.setGlobalRoute('/api/config')
...
router.setModel(...
router.setModel(...
app.use('/api/config', router)

Publish UI:

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.)

(NEW) Use permissions and roles

The library needs to pass your mongoose connection, and a middleware in order to get the user. Here an example:

Typescript:

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:

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)

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)

import ApiRouter from 'mongoose-restapi-ui'
const router = ApiRouter({isMongo4: true})

This object has the same properties as router, with other ones:

Next features

  • API rest self documented
  • Permissions and roles inheritance
1.8.0

5 years ago

1.7.1

5 years ago

1.7.0

5 years ago

1.6.0

5 years ago

1.5.0

5 years ago

1.4.2

5 years ago

1.4.1

5 years ago

1.4.0

5 years ago

1.3.0

5 years ago

1.2.5

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.0

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago