Не работает дистанционный метод коннектора петли - PullRequest
0 голосов
/ 28 сентября 2018

Я использую Loopback в качестве интерфейса API для стороннего API.Я пытаюсь вызвать метод стороннего API через удаленный метод в Loopback.

Без Loopback способ успешного вызова стороннего метода заключается в следующем:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: */*' --header 'authorization: Bearer eyJhbGciOiJIUzUxMiJ9....' -d '{ \ 
     "attr1":"123", \ 
     "attr2":"456" \ 
     }' 'http://third-party-host/plugins/aca74a80/'

С Loopback у меня есть источник данных, который выглядит следующим образом:

{
  ...
  "APIDataSource": {
     "name":"APIDataSource",
     "crud": false,
     "connector": "rest",
     "operations": [
        {
           "functions": {
              "saveEntityAttributes": ["entityId", "mrequest", "authkey"]
           },
           "template": {
              "method": "POST",
              "url": "http://third-party-host/plugins/{entityId}",
              "headers": {
                 "authorization":"Bearer {authkey}"
              },
              "json":"{mrequest}"
           }
        }
     ]
  }
}

и затем код модели, подобный следующему:

'use strict';

module.exports = function(Model) {

Model.saveEntityAttributes = function(req, cb) {
    Model.app.models.MyAPI.saveEntityAttributes(req)
    .then(result => {
      console.log(result);
      cb(null, result);
    })
 }

Model.remoteMethod (

    'saveEntityAttributes',
    {
         http: {path: '/saveentityattributes', verb: 'post'},
         accepts: [ {arg: 'req', type: 'object', http: { source: 'req' } }],
         returns: {root: true}
    }

  );
};

Это выдает ошибку: «запрос не является json», что имеет смысл, так как результирующее содержимое «json» является параметром «entityID»вместо предполагаемого параметра "mrequest" (который содержит json: "{" attr1 ":" 123 "," attr2 ":" 456 "}"), как показано в журнале обратной связи:

loopback:connector:rest Request: {"method":"POST","uri":"http://third-party-host/plugins/aca74a80","json":"aca74a80","headers":{"authorization":"Bearer eyJhbGciOiJIUzUxMiJ9...."}} +0ms
loopback:connector:rest Error Response (status code: 400): "Request is not a JSON object" +152ms

Мой вопрос: как я могу перенести контент "mrequest" в тело "json" вместо текущего контента "entityId"?

Любой совет приветствуется.Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Я уже решил это!

В источниках данных опцию "json" нужно заменить на: "body": "{mrequest: object}"

затем вВ коде модели текущий http-источник 'req' удаленного метода должен быть заменен следующим: 'query'

Тогда в циклическом журнале будет показан правильный вызов запроса:

loopback:connector:rest Request: {"method":"POST","uri":"http://third-party-host/plugins/aca74a80","json":true,"headers":{"authorization":"Bearer eyJhbGciOiJIUzUxMiJ9..."},"body":{"art1":"1qa","atr2":"2ws"}} +0ms
...