2.0.1 • Published 5 years ago
mkres v2.0.1
Introduction
Best way create Restful API in express and mongoose
install
const mongoose = require('mongoose')
require('mkres').setMongoose(mongoose)
Smart Select Attribute
const {parseSelect} = require('mkres')
const User = require('mongoose').model('User')
let {select,populate} = parseSelect(User, 'username,address{street,city,users},...')
let users = User.find({}).select(select).pupulate(populate)
console.logs('>> Users: ', users)
Select text format
- field_1,field_2,field_n : Select declared fields
- field_1,field_2,...: Select declared fields and all other fields in schema
- field_1,field_2{ child_field_1, child_field2} : Populate and select child_field
- field_1,field_2{child_field,...} : Populate and select child field and all other child fields of field_2
- "..." : Select all other fields
Populate and Deep Populate
We can populate by format:
field{} // Populate and select all child field
or
field{f1,f2} // Populate and select declared child field
or
field{...,f1{}} // Populate and select all child field and populate child field
We can deep populate:
field{f{ff{fff1,fff2},...}}
Spread "..." is select all other fields
Smart Find
const {parseFind} = require('mkres')
const User = require('mongoose').model('User')
let findQuery = parseFind('age <= 3 or (age >=5 and age <9)')
let users = User.find(findQuery)
console.logs('>> Users: ', users)
Ussage
Prepare model
User
const mongoose = require('mongoose')
const Schema = mongoose.Schema
let UserSchema = new Schema({
username: {
type: String
},
firstName: String,
age: Number,
address: {
type: Schema.Types.ObjectId,
ref: 'Address'
},
addresses: [
{
type: Schema.Types.ObjectId,
ref: 'Address'
}
]
}, {
timestamps: {
createdAt: true,
updatedAt: true
}
})
const User = mongoose.model('User', UserSchema)
module.exports = User
Address
const mongoose = require('mongoose')
const Schema = mongoose.Schema
let ModelSchema = new Schema({
street: String,
city: String
})
const Model = mongoose.model('Address', ModelSchema)
module.exports = Model
findById
const express = require('express')
const {makeFindById} = require('mkres')
const app = express()
const router = express.Router()
makeFindById({
router: router,
model: User
})
app.use('/users',router)
Use
GET /users/?select=-_id,username,address{city},address{street}
Params:
- select: select option, return only declared field
- extra: return extra declared field, ( use when you want populate some field but select all field)
find
const express = require('express')
const {makeFind} = require('mkres')
const app = express()
const router = express.Router()
makeFind({
router: router,
model: User,
defaultLimit: 10 // for pagination
})
app.use('/users',router)
Use
GET /users/?limit=10&offset=0&page=1&select=username,address{city}&find=(age>=1 and age<=3>) or (age > 5)
Params:
- limit: size of one page
- offset: offset of first item
- select: select option, return only declared field
- extra: return extra declared field, ( use when you want populate some field but select all field)
- find: simple condition for find item in mongo
- one : return one item
create
const {body} = require('express-validator/check')
const express = require('express')
const {makeCreate} = require('mkres')
const app = express()
const router = express.Router()
makeCreate({
router: router,
model: User,
validators: [
body('username').not().isEmpty().withMessage('Kkong duoc de trong')
]
})
app.use('/users',router)
Use
Post /users/?select=username,age,-_id
Params:
- select: select option, return only declared field
- extra: return extra declared field, ( use when you want populate some field but select all field)
update
const {body} = require('express-validator/check')
const express = require('express')
const {makeUpdate} = require('mkres')
const app = express()
const router = express.Router()
makeUpdate({
router: router,
model: User,
validators: [
body('username').not().isEmpty().withMessage('Kkong duoc de trong')
]
})
app.use('/users',router)
Use
PUT /users/:id?select=username,age,-_id
Params:
- select: select option, return only declared field
- extra: return extra declared field, ( use when you want populate some field but select all field)
delete
const express = require('express')
const {makeDelete} = require('mkres')
const app = express()
const router = express.Router()
makeDelete({
router: router,
model: User
})
app.use('/users',router)
Use
DELETE /users/:id
Development
docker-compose up
2.0.1
5 years ago
2.0.0
6 years ago
1.0.8
6 years ago
1.0.7
6 years ago
1.0.6
6 years ago
1.0.5
6 years ago
1.0.4
6 years ago
1.0.3
6 years ago
1.0.2
6 years ago
1.0.1
6 years ago
1.0.0
6 years ago
0.0.8
6 years ago
0.0.7
6 years ago
0.0.6
6 years ago
0.0.5
6 years ago
0.0.4
6 years ago
0.0.3
6 years ago
0.0.2
6 years ago
0.0.1
6 years ago