Unirest и множественная ошибка при загрузке изображения в API - PullRequest
0 голосов
/ 08 октября 2019

Я создаю проект узла, в котором я делаю вызовы к Lambda API для распознавания и распознавания лиц (я добавил ссылку внизу). С помощью этого API я могу создавать альбом, загружать изображения в альбом и обучать альбом. После обучения я могу загружать или связывать изображения через API, который позволяет мне обнаруживать изображения. Теперь моя проблема в том, что когда я пытаюсь установить связь с API, я получаю следующие ошибки:

{ error:
   Error: Body attribute missing in multipart.
       at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:35:36
       at Array.forEach (<anonymous>)
       at Multipart.isChunked (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:33:11)
       at Multipart.onRequest (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:104:22)
       at Request.multipart (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\request.js:1268:19)
       at Request.init (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\request.js:409:10)
       at new Request (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\request.js:127:8)
       at Function.request (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\index.js:53:10)
       at Object.end (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\unirest\index.js:684:27)
       at module.exports.trainAlbum (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\apis\FacedetAPI.js:66:7)
       at Object.<anonymous> (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\server.js:18:14)
       at Module._compile (internal/modules/cjs/loader.js:778:30)
       at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
       at Module.load (internal/modules/cjs/loader.js:653:32)
       at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
       at Function.Module._load (internal/modules/cjs/loader.js:585:3) }
buffer.js:207
    throw new ERR_INVALID_ARG_TYPE(
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined
    at Function.from (buffer.js:207:11)
    at add (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:74:59)
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:89:5
    at Array.forEach (<anonymous>)
    at Multipart.build (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:81:9)
    at Multipart.onRequest (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\lib\multipart.js:109:20)
    at Request.multipart (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\request.js:1268:19)
    at Request.init (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\request.js:409:10)
    at new Request (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\request.js:127:8)
    at Function.request (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\request\index.js:53:10)
    at Object.end (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\unirest\index.js:684:27)
    at module.exports.trainAlbum (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\apis\FacedetAPI.js:66:7)
    at Object.<anonymous> (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\server.js:18:14)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)

Мой код выглядит следующим образом:

trainAlbum = (url, id)=>{
        let requestString = "https://lambda-face-recognition.p.rapidapi.com/album_train";
        let req = unirest("POST", requestString);
        let imgURL = url;
        let entryId = id

        req.headers({
            "x-rapidapi-host": "lambda-face-recognition.p.rapidapi.com",
            "x-rapidapi-key": API_KEY,
            "content-type": "multipart/form-data"
        });

        req.multipart([
            {
                "urls": imgURL
            },
            {
                "files": {},
                "content-type": "application/octet-stream"
            },
            {
                "album": ALBUM_NAME
            },
            {
                "albumkey": ALBUM_KEY
            },
            {
                "entryid": entryId
            }
        ]);

        req.end(function (res) {
          console.log(res);             
        }); 
}

И я называю это какэто:

trainAlbum("http://www.lambdal.com/tiger.jpg", "5d9ca969835e1edb64cf03d5");

Я просто следую примеру из здесь .

Я также заметил, что если я использую этот код, а не тот, что выше, то онна самом деле работает:

unirest.post(requestString)
   .header("X-RapidAPI-Key", API_KEY)
   .field("urls", imgURL)
   .field("album", ALBUM_NAME)
   .field("albumkey", ALBUM_KEY)
   .field("entryid", entryId)
   .end(result => {
       console.log(result.body);
   });

Итак, у меня есть 3 вопроса:

  1. Почему я получаю ошибку об отсутствии атрибута тела в multipart?
  2. Почему я получаюневерный тип аргумента?
  3. Почему второй код действительно работает по сравнению с первым кодом?

Заранее спасибо.

...