我正在尝试使用 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());
});
}