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

这是我的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

       

我认为你想要达到的目标与你编码的不同。
怎么样?

  1. ajax调用中的url指向您希望访问的URL,在您的情况下,发布数据。 但是,你的url指向一个脚本,我猜这没有任何意义。
  2. 据我所知,你的代码中没有向app.js/view发布任何内容
  3. 您可以在nodejs中运行shell脚本,方法与在终端中运行它相同。 您可以使用nodejs内置模块子进程 。 您可以使用spawnexec在nodejs中运行shell脚本。 你可以在互联网上找到很多教程,但这里没有说明。

以下是一些从child processes开始的精彩教程:

  1. http://www.javatpoint.com/nodejs-child-process
  2. https://dzone.com/articles/understanding-execfile-spawn-exec-and-fork-in-node

  3. http://krasimirtsonev.com/blog/article/Nodejs-managing-child-processes-starting-stopping-exec-spawn

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

  1. 调用链接到按钮的click事件(您已正确实现)的事件处理函数。
  2. 在函数内部向/view发出get请求。
  3. /view使用execspawn子进程运行脚本。
  4. 当进程完成执行时,将结果返回到您在jquery-ajax代码中进行的调用(对于success:方法)。

注意:您可能会遇到运行spawnexec异步执行,因为响应将在执行完成之前发送。 在这种情况下,尝试进行spawnSync等同步调用,或者使用外部库来处理异步流(例如 – 异步 )

希望这可以帮助。

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

 var cp = require("child_process"); cp('path_to_your_shell_script', function(error, stdout, stderr){//This is where the shell script is executed and the error or i/o results are passed in as arguments to the callback })