Node.js 入门笔记(5) - child_process
2018-01-11 15:49
609 查看
应用child_process调用执行ansible命令。node.js的文本服务云ansilbe运行在同一台机器上。
1. 前端网页
2. 前端JS脚本
利用jquery和ajax与后台交互。从输入框取出命令发到后台,等后台执行完成后,再显示结果。
3.后台JS程序
路由程序
1. 前端网页
<div class="container" > <div class="row"> <div class="col-sm-12"> <div class="panel panel-default"> <div class="panel-heading"> <form class="form-inline"> <div class="row"> <div class="col-xs-6 text-left"> <button type="button" class="btn btn-success" onclick="execCmd('inputCommand','textareaResult', 'execCmdBTN')" id="execCmdBTN"> 点击运行</button> </div> </div> </form> </div> <div class="panel-body"> <input class="form-control" type="text" id="inputCommand" name="inputCommand" value="ansible all -m ping" ></tinput> </div> </div> </div> <div class="col-sm-12"> <div class="panel panel-default"> <div class="panel-heading"><form class="form-inline"> <button type="button" class="btn btn-default">运行结果</button></form></div> <div class="panel-body"><textarea class="form-control" id="textareaResult" name="textareaResult" rows="20"></textarea></div> </div> </div> </div> </div>
2. 前端JS脚本
利用jquery和ajax与后台交互。从输入框取出命令发到后台,等后台执行完成后,再显示结果。
function execCmd(cmdId, resId, btnId){ var cmdstr = $("#"+cmdId).val(); $("#"+btnId).attr('disabled',true); $("#"+btnId).text('正在运行'); $.ajax({ type: 'post', timeout: 5000, url: '/demo/rcmdExec', dataType: 'JSON', data:{ cmdline: cmdstr }, success:function(data){ if (data.rtCode == '0'){ //alert(data.rtData); $("#"+resId).val(""); $("#"+resId).val(data.rtData); }else{ alert(data.rtMsg); } }, complete: function(XMLHttpRequest, textStatus){ if(textStatus=='timeout'){ alert('timeout'); } $("#"+btnId).attr('disabled',false); $("#"+btnId).text('点击运行'); } }); }
3.后台JS程序
路由程序
var express = require('express'); var router = express.Router(); var demoMd = require('../modles/demoMD'); function jsonWrite(res, data){ if(typeof data == 'undefined'){ res.json({ rtCode: '1', rtMsg: '操作失败' }); }else{ res.json({ rtCode: '0', rtMsg: '操作成功', rtData: data }); } }; //返回rcmd页面 router.get('/rcmd', function(req, res, next){ res.render('apps/demo/rcmd', { title: 'rcmd' }); }); //通过web执行ansible命令 router.post('/rcmdExec', function(req, res, next){ demoMd.ansible(req, res, next, jsonWrite); });实际功能demoMD.js
var childProc = require('child_process'); module.exports = { ansible: function(req, res, next, callback){ var cmdline = req.body.cmdline; childProc.exec(cmdline, function(error, stdout, stderr){ if(error){ console.log(error.stack); console.log('Error code: ' + error.code); } console.log('child Process STDOUT: ' + stdout); callback(res, stdout); }); console.log(req.body); } }对于耗时短,能够即时完成的调用,采用这种方法效果很好。
相关文章推荐
- 创业笔记-Node.js入门之阻塞与非阻塞
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
- Node.js入门学习笔记(二)
- Node.js 入门笔记(1) - 基本环境
- Node.js进程通信模块child_process
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)
- Node.js 使用 child_process 实现多进程
- Node.js 入门笔记(2) - swig模板
- node.js学习笔记(3)_极客学院_服务器入门
- Node.js学习笔记-入门
- Node.js 入门笔记(4) - session
- Node.JS 5.ChildProcessAndFileSystem
- Windows下Node.js使用child_process模块调用系统命令的编码问题
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- Node.js 入门笔记(6) - mysql
- Node.js 中 child_process模块的spawn和exec 方法之间的区别
- Node.js中child_process实现多进程
- Node.js学习笔记(6、child_process模块)
- Node.js 使用 child_process 实现多进程