Being tested
Als-crud-mongoose helps you to do crud queries to mongoDb with url queries.
- 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
- page -> pageNumber
- fixed objectId in index
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
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 users -
count
- the number of users found -
pageNumber
- the page fromreq.query.pageNumber
|| 1 -
pageSize
- the page size fromreq.query.pageSize
|| 20 -
order
- from query -
pages
- number of pages -
err
- 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}
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'})
}
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})
}
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.
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}`
})
})
}