Javascript nodej对两个不同的请求有相同的结果

Javascript nodej对两个不同的请求有相同的结果,javascript,node.js,api,express,unirest,Javascript,Node.js,Api,Express,Unirest,由于@Patrick Evans解决了问题 我正在创建我自己的网络项目,我需要一些帮助。 在网站上,客户被要求上传一张脸部照片。 然后,当客户端按下“上传”按钮时,他的照片会被发送到“face++”api,该api会在不同的ejs页面上返回有关照片的详细信息,如情感和性别。在新页面上,客户看到了他的照片,下面是他的照片的详细信息 它工作正常,但当客户返回主页,选择一张不同的新照片,然后按“上载”时,他会看到自己选择的新照片,但获得的细节与上次照片相同(来自face++api的细节)。 我使用以下

由于@Patrick Evans解决了问题

我正在创建我自己的网络项目,我需要一些帮助。 在网站上,客户被要求上传一张脸部照片。 然后,当客户端按下“上传”按钮时,他的照片会被发送到“face++”api,该api会在不同的ejs页面上返回有关照片的详细信息,如情感和性别。在新页面上,客户看到了他的照片,下面是他的照片的详细信息

它工作正常,但当客户返回主页,选择一张不同的新照片,然后按“上载”时,他会看到自己选择的新照片,但获得的细节与上次照片相同(来自face++api的细节)。

我使用以下方法:

  • 快车
  • unirest用于向“face++”api发出请求
  • cloudinary提供了一个url,并在face++请求时使用该url(该url表示客户端的照片)
  • 用于存储在本地驱动器上的multer
当我在“requestFromApi.end()”函数中打印从“face++”api返回的详细信息时,我已经注意到详细信息与之前的请求没有改变,但我确实注意到cloudinary上传了不同的照片。

我附加了我的app.js代码

非常感谢您的帮助:)


由于@Patrick Evans解决了问题[1]:


我必须确保在每次Post请求时调用“Unirest”,而不仅仅是在执行开始时

看起来您只调用了unirest一次,您确定只需使用它一次,而不必为每个新请求创建一个新的。这意味着您可能正在使用一个已经满足的请求,因此您不会得到不同的结果。尝试在upload callbackPERFECT中使用新的unirest调用,例如
requestFromApi=unirest(“POST”,…)
!非常感谢你。我知道这一定很简单。非常感谢你@PatrickEvansany如何压缩从用户那里得到的文件?不幸的是,cloudinary只允许免费使用10MB。我已经找到了这段代码,但在Mine上找不到实现它的方法,因为Node没有DOM api(比如他们使用的canvas元素),所以您无法实现它。您将需要使用npm模块(如)
    var unirest = require("unirest");
    var requestFromApi = unirest("POST", "https://faceplusplus- 
    faceplusplus.p.rapidapi.com/facepp/v3/detect");
    var cloudinary = require("cloudinary").v2;
    const express = require('express');
    const multer = require('multer');
    const app = express();
    const path = require("path");
    var bodyParser = require("body-parser")
    app.use(bodyParser.json({ limit: '50mb' }));
    app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
     limit: '50mb',
     extended: true
                    }));

    app.set("view engine", "ejs");

    cloudinary.config({
    cloud_name: 'dkqvnprcj',
    api_key: '756886954695832',
    api_secret: 'you know i cant give you that...'
     });

   app.get("/", function (req, res) {
   res.render("FaceApp.ejs");
   });

   // SET STORAGE
   var storage = multer.diskStorage({
   destination: function (req, file, cb) {
   cb(null, 'uploads')
   },
   filename: function (req, file, cb) {
   cb(null, file.fieldname + '-' + Date.now() + 
   path.extname(file.originalname));
   }
   })

   var upload = multer({ storage: storage })

   app.post('/upload', upload.single('photo'), (req, res) => {

   if (req.file) {

cloudinary.uploader.upload(req.file.path, function (error, result) {
  //console.log(req.file);
  let result_ = result;
  let url = result.url;

  //console.log(url)

  requestFromApi.query({
    return_attributes: "gender,age,smiling,facequality,eyestatus,emotion,ethnicity,beauty,skinstatus",
    image_url: url
  });

  requestFromApi.headers({
    "x-rapidapi-host": "faceplusplus-faceplusplus.p.rapidapi.com",
    "x-rapidapi-key": "9dd7fa4266mshf1c29ba307ecf2dp1bb1dajsna431d00b6273",
    "content-type": "application/x-www-form-urlencoded"
  });

  requestFromApi.form({});

  requestFromApi.end(function (result) {
    if (result.error) throw new Error(result.error);
    else {

      let detailsFromApi = JSON.parse(JSON.stringify(result.body.faces));

      detailsFromApi.forEach(function (element) {
        console.log(element);
      });

       res.render("image",{result_ : result_, detailsFromApi:detailsFromApi});
    }

  });

});
       }
     else throw 'error';
     });