如何在按钮单击时运行shell脚本?

时间:2017-01-18 06:16:28

标签: javascript jquery node.js

这是我的app.js

var express = require('express');
var app = express();
app.post('/view', function(req, res) {
    console.log('button clicked !!');
});
app.listen(80);

这是clientside.js 这是我编写ajax调用来运行shell脚本的文件

$('#runScript').click(function() {
    $.ajax({
        type: 'POST',
        dataType: "script",
        url: 'file:///D:/UIForCloning/TabitClient.sh',
        success: function(data) {
            console.log("Success");
        },
        error: function(error) {
            console.log("error");
        }
    });
});

这是view.html

<!DOCTYPE html>
<body>
    <button id='runScript'>LED on</button>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src='clientside.js'></script>
</body>

2 个答案:

答案 0 :(得分:0)

我认为你想要实现的目标与你编码的不同。
如何?

  1. ajax呼叫中的url指向您希望访问的网址,在您的情况下,发布数据。但是,你的url指向一个脚本,我猜这没什么意义。
  2. 据我所知,您的代码中没有向/view
  3. 中的app.js发布任何内容
  4. 您可以在nodejs中运行shell脚本,方法与在终端中运行它相同。您可以使用nodejs作为spawn的内置模块。您可以使用execchild processes在nodejs中运行shell脚本。你可以在互联网上找到很多教程,但这里没有说明。
  5. 以下是一些以get开头的精彩教程:

    1. child process
    2. http://www.javatpoint.com/nodejs-child-process

    3. https://dzone.com/articles/understanding-execfile-spawn-exec-and-fork-in-node

    4. PS:如果您想要运行脚本,则无需通过点击发布任何内容。一个简单的方法是:

      1. 调用链接到按钮的click事件(已正确实现)的事件处理函数。
      2. 在函数内部向/view发出exec个请求。
      3. 使用spawn内的/viewsuccess:子进程运行脚本。
      4. 当进程完成执行时,将结果返回到您在jquery-ajax代码中进行的调用(到spawn方法)。
      5. 注意:您可能会遇到execspawnSync的异步执行问题,因为响应将在执行完成之前发送。在这种情况下,尝试进行$("#sche_inter_form").submit(function(e){ if( ($("#inter_date").val()==="") || checkdateFormat()) { $("#inter_date").css({"border-bottom":" 1px solid #dd4b39"}); e.preventDefault(e); } function checkdateFormat(){ var date = $("#inter_date").val(); console.log(date); var re= new RegExp("/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d+$/"); var result = re.test(date); if (result) { return false; } else{ return true; } } 之类的同步调用,或使用外部库来处理异步流(例如 - http://krasimirtsonev.com/blog/article/Nodejs-managing-child-processes-starting-stopping-exec-spawn

        希望这有帮助。

答案 1 :(得分:-1)

您只能从服务器后端(通过node.js)执行shell脚本。要调用可执行文件/ shell脚本,您需要节点提供的模块child_process.exec()。 您可以像这样使用它:

rbind(res1[c(1, .N)][, .(timeinterval = paste(substr(timeinterval[.N], 
    1, 8), substring(timeinterval[1], 10)), timecount= sum(timecount))], res1[-c(1, .N)])
#        timeinterval timecount
#1: 21:00:00 02:59:59         6
#2: 08:00:00 09:59:59         2
#3: 14:00:00 14:59:59         1
#4: 19:00:00 19:59:59         1