npm install --global vue-cli
vue init webpack mitweb
{"koa": "2.0.0","koa-bodyparser": "3.2.0","koa-router": "7.0.0","ws":"4.1.0","soap": "^0.27.1","vue": "^2.5.2","vue-router": "^3.0.1" ,"axios": "^0.19.0","less": "^3.0.1","less-loader": "^4.1.0","echarts": "^4.2.1","element-ui": "^2.4.4",}
{"webservice":{"ip":"http://192.168.101.87","port":"7722","wsdl":"webserviceName?wsdl"}}
const soap=require("soap");const fs=require("fs");let url="";fs.readFile(__dirname+‘/app.json‘,‘utf-8‘,function(err,data){if(err){console.log(err);}else{let config=JSON.parse(data).webservice;url=config.ip+":"+config.port+"/"+config.wsdl;}})module.exports={getwebservicedata:function (args){console.log("start get webservice......");console.log(url);if(!url){return {"errCode":400,"ret":"连接错误"}}return new Promise((resolve,reject)=>{soap.createClient(url,function(err,client){// console.log(client.describe());if(!client || typeof client.doRequest!="function"){reject("500 服务连接错误");}let params=JSON.stringify(args).toString();try{console.log(params);client.doRequest({"parm":params},function(e,r){if(e){reject(e);}else{console.log("getdata");let data=JSON.parse(r.result);data.errCode=200;// console.log(data);resolve(data);}})}catch(e){console.log(e);}})});},addArgs:function(args,obj){//这里加了一个组合参数的方法,免得每次都写一遍,直接调用就行if(!obj){return args;}for(let o in obj){args[o]=obj[o];}return args;}}
//patrol.jsconst control=require(‘../control‘);const getdata=control.getwebservicedata;const addArgs=control.addArgs;let getAllVIRouteInfo = async (ctx,next)=>{let args={requestType:"GetAllVIRouteInfo"};let result=await getdata(args);ctx.response.status=result.errCode;ctx.response.body=result;};let contrlRoute=async (ctx,next)=>{let args={requestType:"ContrlRoute"};args=addArgs(args,ctx.request.query);//加访问webservice的参数let result=await getdata(args);ctx.response.status=result.errCode;ctx.response.body=result;}module.exports={‘GET /action/GetAllVIRouteInfo‘:getAllVIRouteInfo,‘GET /action/ContrlRoute‘:contrlRoute}
// koa 入口文件const fs=require(‘fs‘);const Koa=require("koa");const router=require("koa-router")();const app=new Koa();//处理 url 开始// console.log(__dirname);var files=fs.readdirSync(__dirname+‘/server/controllers‘);//读controllers目录下所有文件var js_files=files.filter(f=>{return f.endsWith(".js");});//找所有js文件//处理每个js文件for(var f of js_files){// console.log(`from controller: ${f}`);//导入js文件let mapping=require(__dirname+‘/server/controllers/‘+f);for(var url in mapping){// console.log(url);if(url.startsWith(‘GET ‘)){let path=url.substring(4);router.get(path, mapping[url]);}else if (url.startsWith(‘POST ‘)) {// 如果url类似"POST xxx":let path = url.substring(5);router.post(path, mapping[url]);console.log(`register URL mapping: POST ${path}`);} else {// 无效的URL:console.log(`invalid URL: ${url}`);}}}//处理 url 结束app.listen(9000);app.use(router.routes());console.log("koa is listening 9000");
//websocket// 导入WebSocket模块:const WebSocket = require(‘ws‘);// 引用Server类:const WebSocketServer = WebSocket.Server;// 实例化:const wss = new WebSocketServer({port: 3000});var WebSocketEx=null;//暴露ws,供webservice中收到请求使用。wss.on(‘connection‘, function (ws) {console.log(`...前端连接websocket成功...`);// ws.on(‘message‘, function (message) {// console.log(` Received: ${message}`);// });WebSocketEx=ws;});//websocket 结束
//web端作为webservice服务器端const soap=require("soap");const http = require(‘http‘);const web={};web.wsdl = fs.readFileSync(‘static/webInterface.wsdl‘, ‘utf8‘);web.server=null;web.service={doRequest:{doRequest:{patrol:function(params,cb,soapHeader){// console.log("...后台来数据了,马上推送...");let args={};if(params.data){if(params.data.$value){args=JSON.parse(params.data.$value);}else{args=JSON.parse(params.data);}}else{args=params;}if(!args.requestType || args.requestType!=="updateRouteState"){return {result:‘400 No such interface‘};}console.log(args);// console.log("............WebSocketEx............",WebSocketEx);if(WebSocketEx!=null){//调用websocket服务端向前端推数据WebSocketEx.send(`${JSON.stringify(args)}`, (err) => {if (err) {// console.log(`[SERVER] error: ${err}`);console.log(` error: ${err}`);}});}return {result:‘200 ok‘};}}}}web.server=http.createServer(function(request,response){response.end(‘404: Not Found:‘+request.url);});web.server.listen(8285);soap.listen(web.server,‘/doRequest‘,web.service,web.wsdl);console.log("webservice sarted at port 8285");
import Vue from ‘vue‘import App from ‘./App‘import router from ‘./router‘import axios from ‘axios‘import elementUI from ‘element-ui‘import ‘element-ui/lib/theme-chalk/index.css‘Vue.config.productionTip = falseVue.use(elementUI)// axios.defaults.withCredentials=true;Vue.prototype.$axios=axios;/* eslint-disable no-new */new Vue({el: ‘#app‘,router,components: { App },template: ‘<App/>‘})

// router/index.jsimport Vue from ‘vue‘import Router from ‘vue-router‘import index from ‘@/components/index‘import banner from ‘@/components/banner‘import patrol from ‘@/components/patrol/patrol‘import baseconfig from ‘@/components/system/baseconfig‘import sysconfig from ‘@/components/system/sysconfig‘import sysmain from ‘@/components/system/sysmain‘import camera from ‘@/components/condition/camera‘import distuse from ‘@/components/condition/distuse‘import patrolsuccess from ‘@/components/condition/patrolsuccess‘import about from ‘@/components/about/about‘Vue.use(Router)export default new Router({routes: [{path: ‘/‘,name: ‘index‘,component: banner,children:[{path:‘/‘,name:‘index‘,component:index,children:[{path:"/patrol",alias:"",component:patrol,name:"巡视路线"},{path:"/baseconfig",component:baseconfig,name:"基本配置"},{path:"/sysconfig",component:sysconfig,name:"系统配置"},{path:"/sysmain",component:sysmain,name:"系统维护"},{path:"/camera",component:camera,name:"摄像机在线率"},{path:"/distuse",component:distuse,name:"磁盘使用率"},{path:"/patrolsuccess",component:patrolsuccess,name:"巡视成功率"},{path:"/about",component:about,name:"关于"}]}]}]})
export default{methods:{getAllVIRouteInfo(){let _this=this;this.loading=true;_this.$axios.get("action/GetAllVIRouteInfo/").then(res=>{_this.loading=false;let data=res.data;// let data={// routeInfo:[// {routeCode:"200410000191",routeName:"#2主变高压侧",routeState:1,routeTime:"2018/9/5",routeType:"例行巡视",successRate:0},// {routeCode:"200410000190000002",routeName:"#3主变高压侧",routeState:0,routeTime:"2018/9/6",routeType:"例行巡视",successRate:0},// ]// }data.routeInfo.forEach(item=>{if(item.routeState==0){item.currentSuccessRate="未运行";}else{item.currentSuccessRate=Number(item.successRate);}})this.tableData=data.routeInfo;}).catch(err=>{_this.loading=false;_this.$message({type: ‘error‘,message: err,showClose: true});})},}}
export default{methods:{handleRoute(index,row,handle){let _this=this;// console.log(row);let code=row.routeCode;let par={routeCode:code,operationFlag:handle}this.$axios.get("action/ContrlRoute",{params:{routeCode:code,operationFlag:handle}}).then(res=>{let data=res.data;if(data.ret==200){_this.getAllVIRouteInfo();_this.$message({type: ‘success‘,message: "操作成功!",showClose: true});}}).catch(err=>{_this.$message({type: ‘error‘,message: err,showClose: true});})},}}
proxyTable: {‘/action‘:{target:"http://localhost:9000/",changeOrigin:true,}},
import Vue from ‘vue‘;export default {name: ‘patrol‘,data () {return {websocket:null,//websocketaddress:"",//websocket地址端口号tableData:[],//表格数据tableHeight:(document.documentElement.clientHeight-100)<150?150:(document.documentElement.clientHeight-100),//表格高度mytableStyle:{"background":"#f1f1f1","color":"#333333"},loading:false,//表格是否显示加载...wsNum:0,//记录重连次数}},created(){this.getAllVIRouteInfo();this.address=window.location.hostname+":3000/";this.initWebSocket();},methods:{initWebSocket(){var _this=this;if(‘WebSocket‘ in window){this.websocket=new WebSocket("ws://"+this.address);}else if(‘MozWebSocket‘ in window){this.websocket=new WebSocket("ws://"+this.address);}else{console.log("当前浏览器不支持websocket");}this.websocket.onopen = function () {console.log("websock连接 状态 ",_this.websocket.readyState);let reconnectTimer=null;if(_this.websocket.readyState===0){if(reconnectTimer){clearTimeout(reconnectTimer);}reconnectTimer=setTimeout(function(){_this.initWebSocket();reconnectTimer=null;},500);}if(_this.websocket.readyState===1){console.log("websock连接成功");}};this.websocket.onmessage = function (message) {let data =JSON.parse(message.data);_this.loading=false;if(data.VIRouteInfo.length!=0) {data.VIRouteInfo.forEach(item=>{if(_this.tableData.length!=0){_this.tableData.forEach((op,index)=>{if(item.routeCode==op.routeCode){if(item.routeSattion==1){op.routeState=item.routeSattion;op.successRate=item.successRateop.currentSuccessRate=Number(item.successRate);}else{op.routeState=item.routeSattion;op.successRate=item.successRateop.currentSuccessRate="未运行";}Vue.set(_this.tableData,index,op);}})}else{_this.getAllVIRouteInfo();if(item.routeSattion==1){item.currentSuccessRate=Number(item.successRate);}else{item.currentSuccessRate="未运行";}_this.tableData.push(item);}})}}this.websocket.onclose=function(event){//断开重连_this.reconnect();}},//websocket重连reconnect(){let _this=this;// console.log(`重连 ${_this.wsNum} 次`);// if(this.wsNum>30){// return false;// }this.wsNum++;this.initWebSocket();}}}
const path =require(‘path‘), serve = require(‘koa-static‘);// 静态文件serve在koa-router的其他规则之上app.use(serve(path.resolve(‘dist‘)));
tar zxvf node-v10.16.0.tar.gz
cd node-v10.16.0
./configure
make
sudo make install
node -v
npm -v
原文:https://www.cnblogs.com/huijihuijidahuiji/p/89f13e98413184d0d3a60b5bfeed5c2c.html