您的位置:首页 > Web前端 > Node.js

Node.js 入门笔记(5) - child_process

2018-01-11 15:49 609 查看
应用child_process调用执行ansible命令。node.js的文本服务云ansilbe运行在同一台机器上。

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);
}
}
对于耗时短,能够即时完成的调用,采用这种方法效果很好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: