两个不同请求的 NodeJS 相同结果
NodeJS same results for two different requests
感谢@Patrick Evans
我正在创建自己的 Web 项目,需要一些帮助。
在网站上,要求客户上传面部照片。
然后,当客户按下 "upload" 按钮时,他的照片随请求一起发送到 "face++" api,在不同的 ejs 页面返回有关照片的详细信息,例如情绪和性别。在新页面上,客户看到了他的照片,下面是关于他照片的详细信息。
它工作正常,但是当客户回到主页,选择不同的新照片,然后按下上传时,他看到了他选择的新照片,但得到的细节与在最后一张照片(细节来自face++api)。
我使用以下:
- 快递。
- 向 "face++" api.
发出请求的 unirest
- cloudinary 拥有 url,并在 face++ 请求中使用 url(url 代表客户的照片)。
- multer 用于存储在本地驱动器。
当我从 "face++" api 打印出 return 的细节时,在 "requestFromApi.end()" 函数中,我已经注意到细节没有改变根据之前的要求,但我确实在 cloudinary 注意到上传了另一张照片。
我附上了我的 app.js 代码。
非常感谢您的帮助:)
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';
});
感谢@Patrick Evans [1]: https://whosebug.com/users/560593/patrick-evans
我必须确保在每个 Post 请求时调用 "Unirest",而不仅仅是在执行开始时。
感谢@Patrick Evans
我正在创建自己的 Web 项目,需要一些帮助。 在网站上,要求客户上传面部照片。 然后,当客户按下 "upload" 按钮时,他的照片随请求一起发送到 "face++" api,在不同的 ejs 页面返回有关照片的详细信息,例如情绪和性别。在新页面上,客户看到了他的照片,下面是关于他照片的详细信息。
它工作正常,但是当客户回到主页,选择不同的新照片,然后按下上传时,他看到了他选择的新照片,但得到的细节与在最后一张照片(细节来自face++api)。
我使用以下:
- 快递。
- 向 "face++" api. 发出请求的 unirest
- cloudinary 拥有 url,并在 face++ 请求中使用 url(url 代表客户的照片)。
- multer 用于存储在本地驱动器。
当我从 "face++" api 打印出 return 的细节时,在 "requestFromApi.end()" 函数中,我已经注意到细节没有改变根据之前的要求,但我确实在 cloudinary 注意到上传了另一张照片。
我附上了我的 app.js 代码。
非常感谢您的帮助:)
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';
});
感谢@Patrick Evans [1]: https://whosebug.com/users/560593/patrick-evans
我必须确保在每个 Post 请求时调用 "Unirest",而不仅仅是在执行开始时。