Search code examples
node.jsloopbackjsloopback

How to make something like remote method on loop-back middleware?


In fallowing code i want to make something like remote method on middleware in loopback to post values to calculate for example: in app :

submitForm() {
    let headers = new Headers(
      {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
      });
    let options = new RequestOptions({ headers: headers });

    let data = JSON.stringify({
      Value1: this.form.value1,
      Value2: this.form.value2,
      Value3: this.form.value3
    });   
    console.log(data);

    let url = 'http://localhost:3000/calculate';
console.log(url);
    return new Promise((resolve, reject) => {
      this.http.post(url, data, options)
        .toPromise()
        .then((response) => {
          console.log('API Response : ', response.status);
          resolve(response.json());
        })
        .catch((error) => {
          console.error('API Error : ', error.status);
          console.error('API Error : ', JSON.stringify(error));
          reject(error.json());
        });
    });
  }

and in remote method or anything like that, I used such this code but totally fails:

module.exports = function () {
    accepts: [{arg: 'val1', type: 'number'},{arg: 'val2', type: 'number'}],
  returns: {arg: val1+val2, type: 'number'},
  http: {path: '/calculate', verb: 'get'}
});
};

Solution

  • Example remote method that I used correctly

    module.exports = function (TeamRole) {
          TeamRole.getUsers = function (id, cb) {
            TeamRole.find({
              where: {
                teamId: id
              }
            }, function (err, users) {
              cb(null, users);
            });
          };
    
          TeamRole.remoteMethod('getUsers', {
            accepts: {
              arg: "id",
              type: "string",
              required: true
            },
            returns: {
              arg: 'users',
              type: 'Array'
            },
            http: {
              path: '/:id/users',
              verb: 'get'
            }
          });
    }
    

    As above example you can define remote method correctly to achieve you task.

    cheers.