当前位置: 首页 > 后端技术 > Node.js

实战:vue仿dos命令界面

时间:2023-04-03 15:47:51 Node.js

欢迎关注前端小鱼的github,阅读更多原创技术文章vue项目中业务需求弹窗,在弹窗技术栈中执行dos命令vue+nodejs(child_process+koa)child_process是nodejs的子进程模块,child_process.exec可以创建一个shell,然后在shell中执行命令。但是webpack包中并没有包含child_process,页面打印的child_process是一个空对象{},不包含任何方法,所以需要用nodejs作为服务端来完成effectserver:cmd.jsconstkoa=要求(“koa”);//引入koaconstRouter=require("koa-router");//引入koa-routerconstapp=newKoa();//创建koa应用constrouter=newRouter();//创建路由,支持传参constbodyParser=require("koa-bodyparser");//处理post请求app.use(bodyParser());//配置postbodyparser中间件constcors=require("koa-cors");//设置跨域应用.use(cors());//全部允许跨域consticonv=require("iconv-lite");//iconv转码iconv.skipDecodeWarning=true;constchild_process=require("child_process");//封装exec并返回一个Promise对象,方便处理functiondoShellCmd(cmd){letstr=cmd;让结果={};returnnewPromise(function(resolve,reject){child_process.exec(str,{encoding:"binary"},function(错误,stdout,stderr){//console.log(iconv.decode(stdout,"cp936"));if(err){//也返回失败的回文result.errCode=200;result.data={data:iconv.decode(stdout,"cp936"),success:"200",message:"Failure"};if(result.data.data===""){result.data.data=`'${str.split("")["0"]}'不是内部或外部命令、可运行的程序或批处理文件`;}解决(结果);}else{//成功返回回文result.errCode=200;result.data={data:iconv.decode(stdout,"cp936"),success:"200",message:"success"};解决(结果);}});});}//apirouter.post("/koa/action/doShellCmd",asyncctx=>{//console.log(ctx.request.body.cmd);letresult=awaitdoShellCmd(ctx.request.body.cmd);//调用execctx.response.status=result.errCode;ctx.response.body=result.data;});app.use(router.routes());app.listen(3000);console.log("app在3000端口启动...");其次是本地启动这个服务~界面:cmd.jsimportaxiosfrom"@/libs/api.request";//这里是打包好的axios,如果没有打包,可以单独导入使用//执行命令语句exportconstdoShellCmd=data=>{returnaxios.request({url:"/koa/action/doShellCmd",数据,方法:"post"});};记得在前端配置跨域,配置完成后重启项目客户端:cmd.vue