通过 Nodejs POST 请求到 python 脚本

时间:2021-02-16 05:43:59

标签: javascript node.js express

我正在尝试使用 nodejs 将 HTML FORM post 请求发送到后端的 python 脚本,并且还想在 textbar 中显示结果

但是我在这方面遇到了问题,请帮忙解决这个问题,谢谢

我的 start.js 代码该文件包含将 HTML 表单数据发送到后端 python 脚本的 nodejs 代码,该文件还用于显示 python 脚本发送的输出。

start.js 的代码如下

// import express JS module into app 
// and creates its variable. 
var express = require('express'); 
var app = express();
var http = require('http');

const path = require('path');
const router = express.Router();

const bodyParser = require('body-parser')

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}))

// Creates a server which runs on port 3000 and 
// can be accessed through localhost:3000 
app.listen(3000, function() { 
    console.log('server running on port 3000'); 
}) 

app.get('/', home);

function home(req, res){

        res.writeHead(200, {'Content-Type': 'text/html'});
        res.write('<p>Please enter patent number </p>');
        res.write('<form action="/getscore" method="post" enctype="multipart/form-data">');
        res.write('<input type="text" name="patentNumber"><br>');
        res.write('<input type="submit" value="Get score!">')
        res.write('</form>');

        res.write('<p>Below is the calculated score of the patent: </p>')
        res.write('<textarea name="scorevalue" id="scorevalue" cols="30" rows="10" style="margin: 0px; height: 36px; width: 272px;"></textarea>')
        return res.end();       
}

app.post('/getscore', getscore);

function getscore(req, res){
    // Nothing is printed on the screen
    console.log(req.body)
    // res.write("get score received")
}

下面的代码是完美运行并显示输出分数的 start.js 文件的一部分,但我不想使用 URL 并一次又一次地更改 patentNumber 值,我想要在 HTML 表单中输入,然后发送请求。

例如,代替 http://localhost:3000/search?patentNumber=US6954735B1,应该有 HTML 表单仅发送此 US6954735B1,作为响应,我将获得分数。

app.get('/search', searchfunction);

function searchfunction(req, res){
    var spawn = require("child_process").spawn;
    // E.g : http://localhost:3000/search?patentNumber=US6954735B1 

    var process = spawn('python',["./mainfile.py", 
                            req.query.patentNumber]);

    // Takes stdout data from script which executed 
    // with arguments and send this data to res object 
    process.stdout.on('data', function(data) {
        res.send(data.toString()); 
    })

    process.stderr.on('data', function(data){
        res.send(data.toString());
    });
}

0 个答案:

没有答案