Python 如何在node.js中执行HTTP POST请求之前执行此操作?
我对nodejs非常陌生,我尝试做的是将带有一些数据的图像上传到nodejs API,但在将数据保存到Mongo DB之前,我尝试使用Python类对上传的图像进行一些处理,然后将结果保存到DB 所以,我可以将上传的图像发送到python代码,并在将任何数据保存到DB之前等待结果吗 我的密码在这里Python 如何在node.js中执行HTTP POST请求之前执行此操作?,python,node.js,express,Python,Node.js,Express,我对nodejs非常陌生,我尝试做的是将带有一些数据的图像上传到nodejs API,但在将数据保存到Mongo DB之前,我尝试使用Python类对上传的图像进行一些处理,然后将结果保存到DB 所以,我可以将上传的图像发送到python代码,并在将任何数据保存到DB之前等待结果吗 我的密码在这里 router.post('/img2text', upload.single('photo'), (req, res) => { // Create the object for i
router.post('/img2text', upload.single('photo'), (req, res) => {
// Create the object for insertion into database
const Img2text = new img2text({
imgPath: req.file.path,
sender: req.body.sender,
processed: 0,
resultText: "no result",
});
/////////////////////////////////////////////////////////////start
var exec = require("child_process").exec;
exec(`python uploads/hello.py ${req.file.path}`,(error, stdout, stderr) => {
if (error) {
Img2text.processed=0;
Img2text.resultText='no result'
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
Img2text.processed=1;
Img2text.resultText=stdout.toString('utf8');
console.log(`stderr: ${stderr}`);
console.log(req.query.firstname);
});
/////////////////////////////////////////////////////////end
// Save into database
Img2text.save((err) => {
// Check if error
if (err) {
res.json({ success: false, message: err });
} else {
console.log("img saved !!")
res.json({ success: true, message:img.resultText }); // Return success message
}
});
});
如果python代码花费这么长时间,我的对象将是空的
任何答复都将不胜感激
您是否尝试过使用
承诺
,如果没有,请参考此链接。只需将您的流程包装在一个承诺中
,当您完成流程时,将其解析并保存到数据库中
router.post('/img2text', upload.single('photo'), (req, res) => {
// Receive your image
let pythonProcess = new Promise((resolve, reject)=>{
// do your process
reolve() // resolve with updated data
})
pythonProcess.then(img =>{
//save to db
})
})
现在,在您的情况下,最好使用aync/await
。不要把它当作另一种方式来做,这只是使用promise
的现代方式。由于内部等待
也设置承诺
链。您有两种选择,或者您可以通过承诺
使用javascript
的最佳功能之一,或者如果您需要一小段代码,请使用等待
router.post('/img2text', upload.single('photo'), async(req, res) => { // To use await function need to be a async function
// Create the object for insertion into database
const Img2text = new img2text({
imgPath: req.file.path,
sender: req.body.sender,
processed: 0,
resultText: "no result",
});
/////////////////////////////////////////////////////////////start
var exec = require("child_process").exec;
await exec(`python uploads/hello.py ${req.file.path}`,(error, stdout, stderr) => {
if (error) {
Img2text.processed=0;
Img2text.resultText='no result'
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
Img2text.processed=1;
Img2text.resultText=stdout.toString('utf8');
console.log(`stderr: ${stderr}`);
console.log(req.query.firstname);
});
/////////////////////////////////////////////////////////end
// Save into database
Img2text.save((err) => {
// Check if error
if (err) {
res.json({ success: false, message: err });
} else {
console.log("img saved !!")
res.json({ success: true, message:img.resultText }); // Return success message
}
});
});
您的Mongo代码必须等待python代码完成?这是你的要求吗。如果是这样,请尝试“回调”、“承诺”或“异步函数”谢谢,@wahid_abdul是的,这正是我想要做的,我如何使用“回调”、“承诺”或“异步函数”?很乐意帮助:)