Search code examples
node.jsexpressloopbackjsstrongloop

update always inserting last array value


i m new to node and search a lot find solution but don't know how to use with my condition if anyone pro who can help me with this thing

Permissiontb.assembleAndInsert = async (ctx, cb) => {
for (let i = 0; i < ctx.req.body.view.length; i++) {
       console.log('outside i  '+i)
       await Process(ctx,i);
 }
};

 function  Process(ctx,i) {
let data={company_id:ctx.args.options.accessToken.userId,
       userid:ctx.req.body.userid,
       perpage:ctx.req.body.perpage[i].id,
       view:ctx.req.body.view[i],
       edit:ctx.req.body.edit[i],
       update:ctx.req.body.update[i],
       delete:ctx.req.body.delete[i]}

     console.log('inside '+i)
  return new Promise((resolve, reject) => {
    Permissiontb.find({where:{and: [{userid:ctx.req.body.userid}, {perpage:ctx.req.body.perpage[i].id}] }},function(err,result){
     if(err){
             var err = new Error('Some thing went wrong');
             err.statusCode = 444;
             console.log('err'+err)
             resolve(err)
     }else{ console.log(result.length)
         if(result.length>0){
           console.log(ctx.req.body.userid)  
           console.log('page id '+ctx.req.body.perpage[i].id)
           const pgid=ctx.req.body.perpage[i].id
           const vd=ctx.req.body.view[i]
           const ed=ctx.req.body.edit[i]
           const up=ctx.req.body.update[i]
           const del=ctx.req.body.delete[i]
            console.log(ctx.req.body.view[i])
            console.log(ctx.req.body.edit[i])
            console.log(ctx.req.body.update[i])
            console.log(ctx.req.body.delete[i])
            console.log('findinside update '+i)

              resolve(Permissiontb.update({where:{and: [{userid:ctx.req.body.userid}, {perpage:pgid}] }},{view:vd,edit:ed,update:up,delete:del}))

         }else{
             resolve(Permissiontb.create([data]))
         }

     }

    })

 })
}

now problem is that console log inside if(result.lenght>0) condition for eg:- console.log(ctx.req.body.view[i]) correct value getting but when update method always inserting last array value can anyone tell me what i m doing wrong


Solution

  • finally i found soultion may be this will help other who facing issue like me

    var async = require('async');
     module.exports = function(Permissiontb) {
    Permissiontb.assembleAndInsert = async (ctx, cb) => {
    
    for (let i = 0; i < ctx.req.body.view.length; i++) {
           await Process(ctx,i);
       }
     };
    Permissiontb.remoteMethod('assembleAndInsert', {
        http: {
          path: '/assembleAndInsert',
          verb: 'post',
         },
    accepts: [{ arg: 'data', type: 'object', http: { source: 'context' } },
    
    {"arg": "options", "type": "object", "http": "optionsFromRequest"}],
    returns: {
      arg: 'data',
      type: 'object',
    },
    });
    
    
    function  Process(ctx,i) {
      let data={company_id:ctx.args.options.accessToken.userId,
                userid:ctx.req.body.userid,
                perpage:ctx.req.body.perpage[i].id,
                view:ctx.req.body.view[i],
                 edit:ctx.req.body.edit[i],
                 update:ctx.req.body.update[i],
                delete:ctx.req.body.delete[i]}
         return new Promise((resolve, reject) => {
     resolve(Permissiontb.upsertWithWhere({userid:ctx.req.body.userid,perpage:ctx.req.body.perpage[i].id},data))
    
      })
     }
    

    problem is that i m using Permissiontb.upsertWithWhere(//im using where here->{userid:ctx.req.body.userid,perpage:ctx.req.body.perpage[i].id},data))