在快递.js中定义新的承诺



我正在努力将图像发布到Google Vision API,并返回图片所包含内容的标签。

我正在使用 express.js 和 Google Cloud Vision 模块,并且无法根据 Google Vision API 的结果创建承诺。当我将图像发布到 API 时,它将返回一个标签数组。如何确保在视觉 API 帮助程序函数运行后,我存储这些结果并将其返回到我的 react 前端?

服务器.js

const express = require('express');
const bodyParser = require('body-parser')
const path = require('path');
const app = express();
const multer  = require('multer');
const upload = multer({ dest: './uploads' });
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads')
},
filename: function (req, file, cb) {
cb(null, Date.now() + '-' + file.originalname)
}
})
const google = require('../helpers/googleVisionAPI.js');
//Hitting file limits on size, increased to 50mb
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
app.use(require('express-promise')());
app.post('/upload', upload.single('image'), (req, res) => {
google.visionAPI(req.file.path).then(labels => {
//SEND LABELS BACK TO REACT FRONTEND
console.log(labels);
res.send(labels);
})
});
app.listen(8080);

谷歌视觉API.js助手

// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');
// Creates a client
const client = new vision.ImageAnnotatorClient();
let visionAPI = function(image) {
client
.labelDetection(image)
.then(results => {
// Pull all labels from POST request
const labels = [];
results[0].labelAnnotations.forEach(function(element) {
labels.push(element.description);
});
return labels;
})
// ERROR from Cloud Vision API
.catch(err => {
console.log(err);
res.end('Cloud Vision Error:' , err);
});
}
exports.visionAPI = visionAPI;

有人可以让视觉 API 运行,然后将返回的结果存储到标签变量中以发送回我的 react 前端吗?

您的GoogleVisionAPI.js可以缩短为:

// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');
// Creates a client
const client = new vision.ImageAnnotatorClient();
exports.visionAPI = async (filePath) => {
const results = await client.labelDetection(filePath)
const labels = results[0].labelAnnotations.map(element => element.description)
return labels
}

然后,您呼唤助手的Server.js可以是:

app.post('/upload', upload.single('image'), async (req, res) => {
const labels = await google.visionAPI(req.file.path);
console.log(labels)
res.json(labels)
});

错误处理已被省略,应委托给错误处理中间件。

上面的代码未经测试。

相关内容

最新更新