0.2.3 • Published 7 months ago

als-crud-mongoose v0.2.3

Weekly downloads
-
License
ISC
Repository
-
Last release
7 months ago

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 users
  • count - the number of users found
  • pageNumber - the page from req.query.pageNumber || 1
  • pageSize - the page size from req.query.pageSize || 20
  • order - from query
  • pages - number of pages
  • err - if not errors err = 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}`
    })
  })
}
0.2.3

7 months ago

0.2.2

10 months ago

0.2.1

1 year ago

0.2.0

2 years ago

0.15.0

2 years ago

0.1.0

2 years ago

0.0.1

2 years ago