从api检索发布请求响应,并将其传递给另一个发布请求,以传递给angular8应用

时间:2019-10-09 11:46:28

标签: javascript angular http routing response

我正在使用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));
});

2 个答案:

答案 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可以使用它,因为您将获得承诺