Я создаю проект узла, в котором я делаю вызовы к 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 вопроса:
- Почему я получаю ошибку об отсутствии атрибута тела в multipart?
- Почему я получаюневерный тип аргумента?
- Почему второй код действительно работает по сравнению с первым кодом?
Заранее спасибо.