AJAX для запуска файла nodejs при вводе клиентом

#node.js #ajax

#node.js #ajax

Вопрос:

Я возился с nodejs и html, и я хочу запустить дочерний процесс_процесса nodejs, когда клиент нажимает кнопку. Конечно, я не могу сделать это непосредственно в html, запущенном в браузере, поэтому я решил, что должен выполнить ajax-запрос на стороне сервера, чтобы он мог запустить другой файл (который запустит команду в терминале для выполнения скрипта python).

У меня есть app.js чтение файлов и передача их в браузер

У меня также есть index.html содержащий кнопки и funcs.js со скриптом, который я хочу запустить после нажатия кнопки

как я могу сделать этот запрос ajax?

Вот мой код :

index.html

 <!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <title>Lights</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc NcPb1dKGj7Sk" crossorigin="anonymous">

  </head>
  <body class="text-white bg-dark">
    <center>
    <input type="submit" value="OFF" name="OFF" onclick="turnOff()">
    <input type="submit" value="ON" name="ON" onclick="turnOn()">
    </center>
    
    <div id="texttest"> </div>
    <div id="fil"> </div>
    
    
    
    <script>
    
    function turnOff() {
        
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
        if (this.readyState == 4 amp;amp; this.status == 200) {
            document.getElementById("texttest").innerHTML = "trying off";
            }
        };
        xhttp.open("GET", "funcOff.js", true);
        xhttp.send();

/*      $.ajax({
            type: 'POST',
            url: "funcOff.js",
            success: function(response){
                document.getElementById("texttest").innerHTML = "trying off";
            }
        });*/
        
        }
        
    function turnOn() {
    
        $.ajax({
            type: 'GET',
            url: "turnOn.py",
            success: function(response){
                document.getElementById("texttest").innerHTML = "trying on";
            }
        });
        
        }

    </script>
    
  </body>
</html>
 

app.js

 http = require("http"),
path = require("path"),
url = require("url"),
fs = require("fs");
const {exec} = require('child_process');

function sendError(errCode, errString, response)
{
  response.writeHead(errCode, {"Content-Type": "text/plain"});
  response.write(errString   "n");
  response.end();
  return;
}

function sendFile(err, file, response)
{
  if(err) return sendError(500, err, response);
  response.writeHead(200);
  response.write(file, "binary");
  response.end();
}

function getFile(exists, response, localpath)
{
  if(!exists) return sendError(404, '404 Not Found', response);
  fs.readFile(localpath, "binary",
   function(err, file){ sendFile(err, file, response);});
}

function getFilename(request, response)
{
  var urlpath = url.parse(request.url).pathname; // following domain or IP and port
  var localpath = path.join(process.cwd(), urlpath); // if we are at root
  fs.exists(localpath, function(result) { getFile(result, response, localpath)});
}

var server = http.createServer(getFilename);
server.listen(1000);
console.log("Server available...");  
 

funcOn.js

 const { exec } = require('child_process');


exec('python3 turnOn.py', (err, stdout, stderr) => {
  if (err) {
    //some err occurred
    console.error(err)
  } else {
   // the *entire* stdout and stderr (buffered)
   console.log(`stdout: ${stdout}`);
   console.log(`stderr: ${stderr}`);
  }
});
 

Я сначала запускаю node app.js , а затем перехожу localhost:1000/index.html к.
В браузере я могу нажать кнопку и получить ответ, но скрипт не запущен

спасибо за вашу помощь

Комментарии:

1. w3schools.com/js/js_ajax_intro.asp

2. легко сделать простой запрос, но мне нужно запустить скрипт, который хочет получить доступ к терминалу для выполнения python.. Я уже настроил ajax-запрос, вызывающий файл js при нажатии кнопки, но ничего не происходит

3. Не могли бы вы предоставить примеры кода того, что у вас уже есть?

4. Я отредактировал вопрос

5. Я попытался добавить «тип данных: «скрипт» в запрос jquery ajax, но это действует как скрипт от клиента и возвращает ошибку «требуется не определено»