【问题标题】:Retrieving the Post Request response from api and passing it on to another post request to be passed on to angular8 app从 api 检索发布请求响应并将其传递给另一个发布请求以传递给 angular8 应用程序
【发布时间】:2019-10-09 11:46:28
【问题描述】:

我正在使用Face Recognition and Face Detection api by lambda,我需要使用我需要在我的角度应用程序中订阅的帖子从 api 获得响应。结构如下:一个图像被传递给angular app -> Route.js -> function.js。然后它由 api 处理并传递一个 post 响应。现在,由于这在 function.js 中传递了一个后响应,我如何将它备份到结构 function.js->Route.js->angular app?从 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));
});

【问题讨论】:

    标签: javascript angular http routing response


    【解决方案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)
    });)
    

    });

    【讨论】:

    • 很好的答案!谢谢!
    【解决方案2】:

    我不确定这是否回答了您的问题,但要从 API 调用中获取对您的函数的响应,您可以收听从 unirest.post 返回的承诺,即在 unirest.post 行之前和您的函数中添加 return可以使用 then 因为你会得到一个承诺

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多