如何解决如何从http请求运行节点localhost子进程?
我正在尝试使用节点和JavaScript,试图在树莓派上为电机创建无线控制器。基本上,我将节点设置为本地主机,然后使用代理,以便可以通过Internet访问它。我制作了一个带有滑块的html页面,该滑块当前以不同的值发送HTTP请求到localhost的不同路径,而该值应该运行节点子进程。问题在于节点不会像打开页面一样看到HTTP请求,因此它不会运行子进程。我曾尝试寻找替代方法,但我对所有这些都是新手,什么也找不到。对不起,如果我解释错了或误用了一个术语。 JavaScript代码:
<script>
const Http = new XMLHttpRequest();
const urlReverse='https://ip:3000/reverse';
const urlDrive='https://ip:3000/drive';
const urlNeutral='https://ip:3000/neutral';
var rangeslider = document.getElementById("sliderRange");
var output = document.getElementById("demo");
rangeslider.oninput = function() {
if (this.value < 33){
output.innerHTML = 'Reverse';
Http.open("POST",urlReverse,true);
Http.send();
}
else if (this.value >= 33 && this.value <= 66){
output.innerHTML = 'Neutral';
Http.open("POST",urlNeutral,true);
Http.send();
}
else if (this.value > 66){
output.innerHTML = 'Forward';
Http.open("POST",urlDrive,true);
Http.send();
}
}
</script>
节点代码:
const http = require('http');
var app = require('express')();
const { exec } = require("child_process");
app.get('/',function(req,res){
console.log('')
res.sendFile(__dirname + '/index.html');
});
app.get('/neutral',res){
exec("python3 " + __dirname + "/neutral.py",(error,stdout,stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});
res.sendFile(__dirname + '/index.html');
});
app.get('/drive',res){
exec("python3 " + __dirname + "/drive.py",stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});
res.sendFile(__dirname + '/index.html');
});
app.get('/reverse',res){
exec("python3 " + __dirname + "/reverse.py",stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});
res.sendFile(__dirname + '/index.html');
});
// Start the server on port 8080
app.listen(8080,'127.0.0.1');
console.log('Node server running on port 8080');
解决方法
好吧,您正在发送POST请求,但仅将路由绑定到GET请求。
将app.get()
/ drive
/ neutral
的{{1}}更改为reverse
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。