使用Next.js路由和Node.js服务器从React调用Python脚本

5

我正在开发一个以太坊应用程序,它使用了React、Next-routing和基本的Node.js服务器。我想在特定路由claimAnalysis上运行Python脚本,以执行一些预测操作。我希望每次访问claimAnalysis路由时都能执行该脚本。

server.js

const express = require("express")();
const next = require("next");

const app = next({
    dev: process.env.NODE_ENV !== "production"
});

const routes = require("./routes");
const handler = routes.getRequestHandler(app);

app.prepare().then(() => {
    const server = express.use(handler);

    server.listen(3000, (err) => {
        if(err) throw err;
        console.log("Server ready on localhost:3000");
    });
});

routes.js

const routes = require("next-routes")();

routes
    .add("/insurance/new", "/insurance/new")
    .add("/insurance/:address", "/insurance/show")
    .add("/insurance/:address/claims", "/insurance/claims/index")
    .add("/insurance/:address/claims/new", "/insurance/claims/new")
    .add("/insurance/:address/claims/:id/claimAnalysis", "/insurance/claims/claimAnalysis");
    
module.exports = routes;

请指导我是否可以从claimAnalysis.js文件中调用运行Python脚本的函数。
2个回答

4
如果您使用的是Node 10或更高版本,则可以使用util.promisify来执行Python脚本,该脚本返回一个Promise<{ stdout, stderr }>对象。以下是一个示例:
const util = require('util');
const exec = util.promisify(require('child_process').exec);

// function to execute python script
async function executeScript(path) {
  try {
    const { stdout, stderr } = await exec(`python3 ${path}`);
    console.log('stdout:', stdout);
    console.log('stderr:', stderr);
  } catch (e) {
    console.error(e); 
  }
}

现在让我们在你的路由中使用这个函数:

app.get('/insurance/claims/claimAnalysis', async function (req, res) {
  await executeScript();
  res.send('claimAnalysis request completed');
  ...

})



0
你可以使用 "child_process" 完成函数。 你可以看到这个例子:
const path = require('path')
const {spawn} = require('child_process')
/**
   * Run python myscript, pass in `-u` to not buffer console output
   * @return {ChildProcess}
*/
function runScript(){
   return spawn('python', [
      "-u",
      path.join(__dirname, 'myscript.py'),
     "--foo", "some value for foo",
   ]);
}
const subprocess = runScript()
// print output of script
subprocess.stdout.on('data', (data) => {
   console.log(`data:${data}`);
});
subprocess.stderr.on('data', (data) => {
   console.log(`error:${data}`);
});
subprocess.stderr.on('close', () => {
   console.log("Closed");
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接