#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, но это действует как скрипт от клиента и возвращает ошибку «требуется не определено»