LoopBack Удаленные методы и доступ к данным модели

Я работаю над этим часами, и я полностью потерян, потому что документация по loopback не помогает.

Я пытаюсь написать логику приложения в модель. Документация для этого здесь. К сожалению, пример не показывает ничего полезного, кроме передачи внешнего значения в удаленный метод и повторного его возврата. Я хотел бы понять, как запустить запрос в этом контексте и получить доступ к данным модели, но я искал часы и не смог найти документацию даже для этих простых задач. Может быть, я просто смотрю не туда. Может ли кто-нибудь помочь?

Ответ 1

Как правило, вы можете выполнить большинство вещей, которые хотите сделать, например, запрос и доступ к данным модели (операции CRUD) с помощью встроенных методов, которые получают все модели; см. http://docs.strongloop.com/display/LB/Working+with+data. Определение удаленного метода (пользовательская конечная точка REST) ​​для них будет избыточным.

Доступ к стандартным API-интерфейсам CRUD Node (например, myModel.create(), myModel.find(), myModel.updateAll()) в удаленном код метода, если вы хотите.

Вы также можете найти дополнительные связанные примеры в https://github.com/strongloop/loopback-example-app-logic

Вот пример использования приложения https://github.com/strongloop/loopback-getting-started приступая к работе. Он определяет удаленный метод, который принимает число arg и печатает имя coffeeshop с этим идентификатором на консоли:

Этот код является общим /models/coffeeshop.js:

module.exports = function(CoffeeShop) {
...
  // Return Coffee Shop name given an ID.
  
  CoffeeShop.getName = function(shopId, cb) {
    CoffeeShop.findById( shopId, function (err, instance) {
        response = "Name of coffee shop is " + instance.name;
        cb(null, response);
        console.log(response);
    });
  }
...
  CoffeeShop.remoteMethod (
    'getName', 
    {
      http: {path: '/getname', verb: 'get'},
      accepts: {arg: 'id', type: 'number', http: { source: 'query' } },
      returns: {arg: 'name', type: 'string'}
     }
  );
};

Ответ 2

Наконец-то я обнаружил свою проблему. Свойства объекта должны быть загружены при обратном вызове функции, вызывающей операцию CRUD. Для меня работал следующий синтаксис:

module.exports = function (TestModel) {
    TestModel.testRemoteMethod = function (id, name, cb) {
        TestModel.findOne({where: {id: id}}, function(err, modelInstance) {
            //modelInstance has properties here and can be returned to
            //the API call using the callback, for example:
            cb(null, {"name": modelInstance.name});
        }
    }
    TestModel.remoteMethod('testRemoteMethod',
        //..rest of config