如何在按钮单击时运行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
我认为你想要达到的目标与你编码的不同。
怎么样?
- ajax调用中的url指向您希望访问的URL,在您的情况下,发布数据。 但是,你的
url
指向一个脚本,我猜这没有任何意义。 - 据我所知,你的代码中没有向
app.js
的/view
发布任何内容 - 您可以在nodejs中运行shell脚本,方法与在终端中运行它相同。 您可以使用
nodejs
内置模块子进程 。 您可以使用spawn
或exec
在nodejs中运行shell脚本。 你可以在互联网上找到很多教程,但这里没有说明。
以下是一些从child processes
开始的精彩教程:
- http://www.javatpoint.com/nodejs-child-process
-
https://dzone.com/articles/understanding-execfile-spawn-exec-and-fork-in-node
-
http://krasimirtsonev.com/blog/article/Nodejs-managing-child-processes-starting-stopping-exec-spawn
PS:如果您想要运行脚本,则无需通过单击发布任何内容。 一个简单的方法是:
- 调用链接到按钮的click事件(您已正确实现)的事件处理函数。
- 在函数内部向
/view
发出get
请求。 - 在
/view
使用exec
或spawn
子进程运行脚本。 - 当进程完成执行时,将结果返回到您在jquery-ajax代码中进行的调用(对于
success:
方法)。
注意:您可能会遇到运行spawn
或exec
异步执行,因为响应将在执行完成之前发送。 在这种情况下,尝试进行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 })