我正在使用Face Recognition and Face Detection api by lambda,我需要使用我需要在我的角度应用程序中订阅的帖子从api获得响应。结构如下:将图像传递到角度应用-> Route.js-> function.js 。然后由api处理并传递后响应。现在,由于此方法在function.js中传递了后期响应,因此如何将其备份到结构 function.js-> Route.js-> Angular应用中?从Route.js-> angular我现在可以通过res.status(200).json(object)方法设置对象,但是来自function.js的响应又如何呢?
function.js
this.recognizeImg = (url)=>{
let requestString = "https://lambda-face-recognition.p.rapidapi.com/recognize";
let req = unirest("POST", requestString);
let imgURL = url;
unirest.post(requestString)
.header("X-RapidAPI-Key", API_KEY)
//.field("urls", imgURL)
.attach("files", fs.createReadStream(createPath(imgURL)))
.field("album", ALBUM_NAME)
.field("albumkey", ALBUM_KEY)
.end(result => {
console.log("successfully recognized image");
console.log(result.body);
});
}
Route.js
facedetAPIRoutes.route("/").post(function (req, res){
let imageUrl = req.body.url;
myFaceDetAPI.recognizeImg(imageUrl);
res.status(200).json(myFaceDetAPI.recognizeImg(imageUrl));
});
答案 0 :(得分:1)
您应使用promise进行异步操作:
this.recognizeImg = (url)=>{
let requestString = "https://lambda-face-recognition.p.rapidapi.com/recognize";
let req = unirest("POST", requestString);
let imgURL = url;
var promise = new Promise(function(resolve, reject) {
unirest.post(requestString)
.header("X-RapidAPI-Key", API_KEY)
//.field("urls", imgURL)
.attach("files", fs.createReadStream(createPath(imgURL)))
.field("album", ALBUM_NAME)
.field("albumkey", ALBUM_KEY)
.end(result => {
console.log("successfully recognized image");
console.log(result.body);
resolve(result.body) // giving response back
});
});
return promise;
}
现在在Route.js中:
facedetAPIRoutes.route("/").post(function (req, res){
let imageUrl = req.body.url;
myFaceDetAPI.recognizeImg(imageUrl).then(function(res) {
// here is your response back
console.log(res)
});)
});
答案 1 :(得分:0)
我不确定是否能回答您的问题,但是要使API调用返回响应给您的函数,您可以收听unirest.post返回的promise,即在unirest.post行之前和函数内部添加return可以使用它,因为您将获得承诺