Search code examples
loopbackangular-loopback

LoopBack Remote Method to return array of records


I used loopback to generate my api and AngularJS to communicate with it. I have a model called Sync that contains the following records:

Sync": {
"34": "{\"uuid\":\"287c6625-4a95-4e11-847e-ad13e98c75a2\",\"table\":\"Property\",\"action\":\"create\",\"timeChanged\":1466598611995,\"id\":34}",
"35": "{\"uuid\":\"287c6625-4a95-4e11-847e-ad13e98c75a2\",\"table\":\"Property\",\"action\":\"update\",\"timeChanged\":1466598625506,\"id\":35}",
"36": "{\"uuid\":\"176aa537-d000-496a-895c-315f608ce494\",\"table\":\"Property\",\"action\":\"update\",\"timeChanged\":1466598649119,\"id\":36}"
}

in my sync.js Model file I am trying to write the following method that accepts number (long - the timeChanged) and should return all of the records that are have equal or equal timeChanged field.

This is where I am at:

Sync.getRecodsAfterTimestamp = function(timestamp, cb){
var response = [];
Sync.find(
  function(list) {
    /* success */
  // DELETE ALL OF THE User Propery ratings associated with this property
  for(i = 0; i < list.length; i++){
    if(list[i].timeChanged == timestamp){
      response += list[i];
      console.log("Sync with id: " + list[i].id);
    }
  }
  cb(null, response);
},
function(errorResponse) { /* error */ });
}

Sync.remoteMethod (
'getRecodsAfterTimestamp',
{
  http: {path: '/getRecodsAfterTimestamp', verb: 'get'},
  accepts: {arg: 'timeChanged', type: 'number', http: { source: 'query' } },
  returns: {arg: 'name', type: 'Array'}
 }
);

When I try this method in the loopback explorer I see this "AssertionError"

enter image description here


Solution

  • Your problem must be due to incorrect arguments supplied to the Sync.find() method. (You have provided 2 functions for success and error scenarios). As per the Strongloop documentation, the persisted model's find function has 2 arguments viz. an optional filter object and a callback. The callback uses the node error-first style.

    Please try changing your Sync.find() to something like below:

    Sync.find(function(err, list) {
    if (err){
        //error callback
    }
        /* success */
    // DELETE ALL OF THE User Propery ratings associated with this property
    for(i = 0; i < list.length; i++){
        if(list[i].timeChanged == timestamp){
            response += list[i];
            console.log("Sync with id: " + list[i].id);
        }
    }
    cb(null, response);
    });