als-crud-mongoose v0.2.3
Als-crud-mongoose
Being tested
About
Als-crud-mongoose helps you to do crud queries to mongoDb with url queries.
New in 0.2
- update crud
- prepare if fn == null dont include this value
- read
- no keywords
- outError
- 0.2.1
- read - if count>limit, dont limit and show page 1
New in 0.15
- page -> pageNumber
- fixed objectId in index
CRUD Usage
Here is the syntax:
let {read,create,createMany,update,updateOne,prepare,prepareMany,remove} = require('als-crud-mongoose')
read(
Model,req,{
select='-__v',
populate=[],
search={},
order=''
},
searchQuery=true,
outError=false
): {models:[],pageNumber,order,pages:1,pageSize,err,error}
create(Model,data,manipulate):{data,model:newModel,err}
createMany(Model,data,manipulate): array
update(Model,search,data,manipulate={}): {results:array,err}
updateOne(Model,search,data,manipulate={},model): {model,error}
remove(Model,search): {err,count}
prepareMany(models,manipulate,newModels = []): newModels
prepare(model,manipulate,newModel={}): newModel
read method
Example:
Let's say we want all users with keyword "Alex" in name and email in order by age from younger to older.
Also We want only 10 results on page 3.
Here is the url query:
/?name=Alex&email=Alex&pageSize=10&pageNumber=3order=-age
Here the code for this
async function(req,res) {
let User = require('./models/User')
let {read} = require('als-crud-mongoose')
let data = await read(User,req,{})
let {models,count,pageNumber,pageSize,pages,err} = data
}
On example above we get returebd data object which includes:
models
- the array of userscount
- the number of users foundpageNumber
- the page fromreq.query.pageNumber
|| 1pageSize
- the page size fromreq.query.pageSize
|| 20order
- from querypages
- number of pageserr
- if not errorserr = null
Let's add some addons. Now we want to get only active users and populate image and if there is error, console log it.
async function(req,res) {
let User = require('./models/User')
let {read} = require('als-crud-mongoose')
let data = await read(User,req,{populate:['image'],search:{active:true}})
let {models,count,pageNumber,pageSize,pages,err} = data
}
If ther is the error we well get {models:[],pageNumber,order,pages:1,pageSize,err:true,error}
Update
async function(req,res) {
let User = require('./models/User')
let {updateOne} = require('als-crud-mongoose')
let _id = req.params.user
let data = req.body
let manipulate = {
email: email => email.toLowerCase()
}
let {model,err} = await updateOne(User,{_id},data,manipulate)
}
On example above, user will be updated with new data by model keys.
Also, each value will be sanitized for not including $
at start.
async function(req,res) {
let User = require('./models/User')
let {update} = require('als-crud-mongoose')
let {model,err} = await update(User,{name:'Alex'},{name:'Alexander'})
}
Remove
async function(req,res) {
let User = require('./models/User')
let {remove} = require('als-crud-mongoose')
let _id = req.params.user
let {count,err} = await remove(User,{_id})
}
Create
async function(req,res) {
let User = require('./models/User')
let {create,createMany} = require('als-crud-mongoose')
let data = req.body
let {model,err} = await create(Model,data,manipulate)
let models = await create(Model,data,manipulate)
}
Data sanitized.
Prepare
Example:
function time(d) {
return new Date(d).toLocaleTimeString([], {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
})
}
let User = require('./models/User')
let {prepare,prepateMany} = require('als-crud-mongoose')
async function prepareUser() {
let data = await read(User,req,{populate:['image']})
data.models = prepareMany(data.models,{
_id:id=>id.toString(),
createdAt:(d,model) => time(d),
image:prepare(model,{
url:(url,imageModel) => `/images/${imageModel.name}`
})
})
}