Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在node.js中执行HTTP POST请求之前执行此操作?_Python_Node.js_Express - Fatal编程技术网

Python 如何在node.js中执行HTTP POST请求之前执行此操作?

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

我对nodejs非常陌生,我尝试做的是将带有一些数据的图像上传到nodejs API,但在将数据保存到Mongo DB之前,我尝试使用Python类对上传的图像进行一些处理,然后将结果保存到DB

所以,我可以将上传的图像发送到python代码,并在将任何数据保存到DB之前等待结果吗

我的密码在这里

  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是的,这正是我想要做的,我如何使用“回调”、“承诺”或“异步函数”?很乐意帮助:)