Skip to content Skip to sidebar Skip to footer

Loopback - Getting Function Back Instead Of Values

For some endpoints I get a function back when called instead of the actual values (code at the end). It looks like that it only appears for nested endpoints through my Patient mode

Solution 1:

I reproduced this error:

SomeModel.find({ where: { userId: userId }, include : ['otherModel'] }, (err, response) => {
    var someArray = response;
    for (var x in someArray) {
      var otherModel = someArray[x].otherModel;
      console.log(otherModel);
    }
 });

The console output of otherModel is :

function (condOrRefresh, options, cb) {
        if (arguments.length === 0) {
          if (typeof f.value === 'function') {
            return f.value(self);
          } elseif (self.__cachedRelations) {
            return self.__cachedRelations[name];
          }
        } else {
          const condOrRefreshIsCallBack = typeof condOrRefresh === 'function' &&
            options === undefined &&
            cb === undefined;
          if (condOrRefreshIsCallBack) {
            // customer.orders(cb)
            cb = condOrRefresh;
            options = {};
            condOrRefresh = undefined;
          } elseif (typeof options === 'function' && cb === undefined) {
            // customer.orders(condOrRefresh, cb);
            cb = options;
            options = {};
          }
          options = options || {};
          // Check if there is a through model// see https://github.com/strongloop/loopback/issues/1076if (f._scope.collect &&
            condOrRefresh !== null && typeof condOrRefresh === 'object') {
            f._scope.include = {
              relation: f._scope.collect,
              scope: condOrRefresh,
            };
            condOrRefresh = {};
          }
          return definition.related(self, f._scope, condOrRefresh, options, cb);
        }
      }

Since the output of otherModel is a function. I tried calling it with : var otherModel = batchArray[x].otherModel() as a function instead of var otherModel = batchArray[x].otherModel. It gives the desired output.

This behaviour explains that the include filter returns a function of the model which gets executed and passes as an object to the frontend but in the backend it needs to be called as a function.

I am still trying to figure out how it returns the desired object to frontend and a function to backend. Any leads would be helpful.

Post a Comment for "Loopback - Getting Function Back Instead Of Values"