如何从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