Как использовать jsonschema для Loopback remoteMethod?

В моем приложении я хочу определить схемы JSON для пользовательского API.

Например, из: http://docs.strongloop.com/display/public/LB/Remote+methods#Remotemethods-Example

module.exports = function(Person){

    Person.greet = function(msg, cb) {
      cb(null, 'Greetings... ' + msg);
    }

    Person.remoteMethod(
        'greet', 
        {
          accepts: <generate definitions from jsonschema>,
          returns: <generate definitions from jsonschema>
        }
    );
};

Как это сделать?

Это правильный путь?

МОЕ РЕШЕНИЕ - декоратор проверки + параметры удаленного метода с типом объекта

var validate = require('jsonschema').validate;

bySchema = function (schema) {
  return function (func) {

    return function () {
      var data = arguments[0],
        callback = arguments[1];

      var result = validate(data, schema);

      if (result.errors.length > 0) {
        // some errors in request body
        callback(null, {
          success: false,
          error: 'schema validation error',
        });
        return;
      }
      return func.apply(this, arguments);
    };
  };
};

defaultRemoteArguments = {
  accepts: {
    arg: 'data',
    type: 'object',
    http: function(ctx) {
      return ctx.req.body;
    }
  },
  returns: {
    arg: 'data',
    type: 'object',
    root: true
  }
};

Пример:

Auth.login = bySchema(require('<path to shcemajson json for this request>'))
  (function(data, cb) {
    // process request
  });
Auth.remoteMethod('login', defaultRemoteArguments);

В этом решении contrib loopback explorer будет бесполезен, потому что запрос / ответ - это объекты, а не поля ...


person estin    schedule 16.12.2014    source источник


Ответы (2)


Правильный способ сделать это - установить type в атрибуте returns на имя модели. В вашем случае вы бы написали:

Person.remoteMethod(
        'greet', 
        {
          ...
          returns: {type:'Person', ...}
        }
    );
person geoand    schedule 30.01.2015

Вам необходимо изменить вывод, чтобы он соответствовал формату, принятому свойством returns.

...
returns: [{arg: "key1", type: "string"}, {arg: "key2", type: "object"}, ...];
...
person superkhau    schedule 19.12.2014