基于nodejs实现js后端化处理

今天D哥给我提了个问题,“用php执行过js没”?咋一听,没戏~~毕竟常规情况下,js是依赖浏览器运行的。想在php后端采集的同时利用js运行结果并传递给php使用,没戏!

然后回头一想,要是换成nodejs呢?利用nodejs作为解析js的服务器,然后php请求nodejs运行结果,岂不是能够变相实现php调取js执行的结果?

说干就干,nodejs只是初步涉猎,要想实现想法,需要:

  1. 利用nodejs搭建一个http服务
  2. nodejs能够接收传入参数
  3. nodejs能够正确运行相应前端js的方法

首先是1. 利用nodejs搭建一个http服务

//@filename nodeServer.js
var http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Node.js");
    response.end();
}).listen(8888);

然后启动服务:

node nodeServer.js

查看服务器结果:

curl http://localhost:8888

结果显示:

Node.js

Nice,服务器搭建成功,第一步完成。

然后是2. nodejs能够接收传入参数

//@filename nodeServer.js
var http = require("http");
var url  = require('url');
http.createServer(function(request, response) {
    var arg = url.parse(request.url, true).query;  //arg => { key : "111" }
    response.writeHead(200, {"Content-Type": "text/plain"});
    var result = getResult(arg.key);
    response.write(result + "\n");
    response.end();
}).listen(8888);

/**
 * 函数调用
 */
function getResult(key) {
    return 'key is: ' + key;
}

这样,就可以通过?key=keyword的方式,往nodejs服务中传入变量参数,用于后续的处理了。
测试一下:

curl http://localhost:8888?key=1

结果显示:

key is: 1

一切如预期一样,第二步也正常完成。

最后是3. nodejs能够正确运行相应前端js的方法
这里其实就是把前端方法的调用,引入到getResult函数内部,然后返回结果到nodejs服务,输出。
涉及引入多个文件时,按照前端引入顺序,逐个合并文件内容,并把最终结果,放入nodeServer.js最后,然后把调用方法,写入getResult函数。有时候会遇到如window、location.href之类的调用,在如影响数据的情况下,选择性删除即可。最终例子如下:

var http = require("http");
var url  = require('url');
http.createServer(function(request, response) {
    var arg = url.parse(request.url, true).query;  //arg => { username:"111", password:"222" }
    response.writeHead(200, {"Content-Type": "text/plain"});
    var result = getResult(arg.username, arg.password);
    response.write(result + "\n");
    response.end();
}).listen(8888);
/**
 * 函数调用
 */
function getResult(username, password) {
    return getLoginInfo(username, password);    //调用前端处理的函数
}

//=================================================
//              以下为前端js
//=================================================
function GetCharLength(c){var b=0;for(var a=0;a<c.length;a++){if(c.charCodeAt(a)>255){b+=2}else{b+=1}}return b}var $=function(a){return document.getElementById(a)};String.prototype.Trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"")};Number.prototype.toFixed=function(f){var g=Math.round(this*Math.pow(10,f))/Math.pow(10,f);var e=g+"";var k=e.split(".");var h="0000000000";if(k.length==1){if(f==0){e=k[0]}else{e=k[0]+"."+h.substr(0,f)}}else{e=k[0]+"."+(k[1]+h).substr(0,f)}return e};Number.prototype.Save=function(b){var e=this.toFixed(4).split(".");var d=e[1];var a=d.length;var f=b;for(var c=a;c>=b;c--){if(d.substr(c-1,1)!="0"){f=c;break}}return e[0]+"."+e[1].substr(0,f)};function QueryStringUrl(b){return"";var a=location.search;var c=new RegExp("(\\?|\\&)"+b+"=([^\\&]*)(\\&?)","i").exec(a);if(c!=null){return RegExp.$2}else{return""}}function BrowserType(){var d="";try{var a=navigator.userAgent.toLowerCase();var c=/(firefox|netscape|opera|chrome|msie|safari).?[\d\.]+/.exec(a);d=c[0]}catch(b){d="Browser_Error"}return d}function RegMobileNo(a){var b=/^[0-9]{11}$/;if(b.test(a)){return true}else{return false}}function RegEmail(a){var b=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;if(b.test(a)){return true}else{return false}}function RegChina(a){var b=/^[\u0391-\uFFE5]+$/;if(b.test(a)){return true}else{return false}}function RegPassWord(a){var b=/^(?![^a-zA-Z]+$)(?!\D+$).{6,18}$/;if(b.test(a)){return true}else{return false}}function funcChina(a){if(/.*[\u4e00-\u9fa5]+.*$/.test(a)){return true}else{return false}}function RegQq(a){var b=/^[^0]\d{3,10}$/;if(b.test(a)){return true}else{return false}}function RegPhoneNumber(b){var a=/^(((13[0-9]{1})|15[0-9]{1}|17[0-9]{1}|18[0-9]{1}|14[0-9]{1}|)+\d{8})+$/;if(a.test(b)){return true}else{return false}}function CompareDate(b,a){var m=b.split("-");var k=a.split("-");var f=m[0];var n=m[1];var d=m[2];var e=k[0];var h=k[1];var c=k[2];var l=new Date(f,n,d);var g=new Date(e,h,c);if(g<=l){return true}else{return false}}function RegCurrency(a){var b=/^\d+(\.\d+)?$/;if(b.test(a)){return true}else{return false}}function RegCurrencyNegative(a){var b=/^[+-]?\d+(\.\d*)?$/;if(b.test(a)){return true}else{return false}}function RegNumber(b){var a=/^\d+$/;if(a.test(b)){return true}else{return false}}function RegDouble(b){var a=/^[-\+]?\d+(\.\d+)?$/;if(a.test(b)){return true}else{return false}}function RegDate(b){var a=/^([0-9]{1,2})[./]{1}([0-9]{1,2})[./]{1}([0-9]{4})$/;if(a.test(b)){return true}else{return false}}function Trim(a){return a.replace(/(^\s*)|(\s*$)/g,"")}function stopEvent(a){if(!a){a=window.event}if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}}function EventEnter(evt,para,option){evt=evt?evt:(window.event?window.event:null);if(evt.keyCode==13){switch(para){case 0:$(option).focus();break;case 1:stopEvent(evt);eval(option);break}return false}}var booStopF5=true;function CheckKeyDown(b){b=b||window.event;if((b.which||b.keyCode)==116&&booStopF5){if(b.preventDefault){b.preventDefault()}else{event.keyCode=0;b.returnValue=false}}else{var a=b.srcElement?b.srcElement:b.target;if((b.which||b.keyCode)==13&&a.nodeName!="TEXTAREA"){return false}}}var strWebPath="";function CheckPath(){var d="";var e=window.location.href.split("&")[0].split("/");var b=4;var a=e.length-b;for(var c=0;c<a;c++){d+="../"}return d}function DropInit(a,b,c){$(a).options.length=0;$(a).options.add(document.createElement("OPTION"));$(a).options[0].text=c;$(a).options[0].value=b}function ShowDiv(a){$(a).style.display=""}function HiddenDiv(a){$(a).style.display="none"}function NullFunction(){}function DetachMouseOutEvent(a){$(a).onmouseout=function(){NullFunction()}}function PositionLayer(k,h,b,a){var d=document.getElementById(k);var g=document.getElementById(h);var e=d.style;var f=g.offsetTop;var c=g.offsetLeft;while(g=g.offsetParent){f+=g.offsetTop;c+=g.offsetLeft}e.top=Number(f+b)+"px";e.left=Number(c+a)+"px"}function LoadJsFile1(strUrl,strFunction){var datTime=new Date();var script=document.createElement("script");script.type="text/javascript";script.src=strUrl+"?Time="+datTime.getTime();document.getElementsByTagName("head")[0].appendChild(script);script.onload=script.onreadystatechange=(function(script){var _this=this;return(function(){if(script.readyState){if(script.readyState.match(/loaded|complete/i)){eval(strFunction);_this=script=null}}else{eval(strFunction);_this=script=null}})}).call(this,script)}function LoadJsFile(c){var b=new Date();var a=document.createElement("script");a.setAttribute("type","text/javascript");a.setAttribute("src",c+"?Time="+b.getTime());document.body.appendChild(a)}function CloseWindow(){window.opener=null;window.self.close()}function CloseParentWindow(){top.window.opener=null;top.window.self.close()}function ClearInputText(b,a){if($(b).value==a){$(b).value=""}}function RequestXML(c,b,d){var a;if(window.ActiveXObject){a=new ActiveXObject("Microsoft.XMLHttp")}else{if(window.XMLHttpRequest){a=new XMLHttpRequest()
}}a.open("Post",c,true);a.setRequestHeader("Content-Type","application/x-www-form-urlencoded");a.onreadystatechange=function(){ResponseXML(a,d)};a.send(b)}function RequestXML1(strUrl,strPostValue,strFuntionName){var xmlHttp;if(window.ActiveXObject){xmlHttp=new ActiveXObject("Microsoft.XMLHttp")}else{if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest()}}xmlHttp.open("Post",strUrl,false);xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xmlHttp.send(strPostValue);if(xmlHttp.readyState==4){var intStatus=xmlHttp.status;if(intStatus==200){eval(strFuntionName)}else{alert("服务器异常"+intStatus)}}}function ResponseXML(xmlHttp,strFuntionName){if(xmlHttp.readyState==4&&xmlHttp.status==200){eval(strFuntionName)}else{if(xmlHttp.readyState==4&&xmlHttp.status==404){alert("程序异常,找不到被调用的页面。")}}}var intPageIndex=1;var intPageSize=20;var intRecordCount=0;function PageList(h){var c=parseInt((parseInt(intRecordCount)+parseInt(intPageSize)-1)/parseInt(intPageSize));if(c<=1){return""}var g=10;var e=(parseInt((intPageIndex+g-1)/g)-1)*g+1;var d=e+g-1;if(intPageIndex%g==0){e++;d++}if(intPageIndex%g-1==0&&intPageIndex!=1){e--;d--}if(d>=c){d=c}var a=intPageIndex-1;var m=intPageIndex+1;var b="<img style='cursor:pointer;' onclick=\""+h+"("+a+')" src="'+strWebPath+'Images/Icon/PagePre.gif" />';var k="<img style='cursor:pointer;' onclick=\""+h+"("+m+')" src="'+strWebPath+'Images/Icon/PageNext.gif" />';if(a<1){a=1;b=""}if(m>c){m=c;k=""}var l='<div class="pageInde">'+b;for(var f=e;f<=d;f++){if(intPageIndex==f){l+='<span class="thisPage">'+f+"</span>"}else{l+='<a href="javascript:'+h+"("+f+');">'+f+"</a>"}}l=l+k+"</div>";l+="总共:"+intRecordCount+"&nbsp;条&nbsp;&nbsp;共:"+c+"&nbsp;&nbsp;页&nbsp;当前第:"+intPageIndex+"&nbsp;页";return l}function PageListUi(h){var c=parseInt((parseInt(intRecordCount)+parseInt(intPageSize)-1)/parseInt(intPageSize));if(c<=1){return""}var g=5;var e=(parseInt((intPageIndex+g-1)/g)-1)*g+1;var d=e+g-1;if(intPageIndex%g==0){e++;d++}if(intPageIndex%g-1==0&&intPageIndex!=1){e--;d--}if(d>=c){d=c}var a=intPageIndex-1;var m=intPageIndex+1;var b='<a href="javascript:'+h+"("+a+');">上一页</a>\n';var k='<a href="javascript:'+h+"("+m+');">下一页</a>\n';if(a<1){a=1;b=""}if(m>c){m=c;k=""}var l="";for(var f=e;f<=d;f++){if(intPageIndex==f){l+='<a class="current" href="javascript:;">'+f+"</a>\n"}else{l+='<a href="javascript:'+h+"("+f+');">'+f+"</a>\n"}}l='<div class="page">\n'+b+l+k+"</div>";return l}var arrValidateKeyList=new Array();var arrValidateID=new Array();var intValidateIndex=-1;function LoadValidateImg(a){intValidateIndex=GetValidateIndex(a);var c=new Date();var b=c.getTime();var d=strWebPath+"Aspx/Common/ValidateImg.aspx?Key="+b;arrValidateKeyList[intValidateIndex]=b;$(arrValidateID[intValidateIndex]).src=d}function ErrorValidateImg(a){$(a).src=strWebPath+"Images/Icon/null.gif";setTimeout('LoadValidateImg("'+a+'")',1000)}function GetValidateIndex(a){var d=-1;var c=false;for(var b=0;b<arrValidateID.length;b++){d=b;if(arrValidateID[b]==a){c=true;break}else{c=false}}if(!c){d++;arrValidateID[d]=a}return d}function random(b,a){return Math.floor(b+Math.random()*(a-b))}var objNewWindow=null;function Apen(b,a){if(objNewWindow!=null){objNewWindow.close()}objNewWindow=window.open(b,a)}function DateFormat(d){var e=0;var c=0;var a="";var b=d/24+"";b=b.split(".");e=Number(b[0]);if(e>0){a=e+"天"}c=Number(d%24);if(c>0){a+=c+"小时"}return a}function LoadingDiv(){var a='<div style="width: 100%; text-align: center;"><img src="'+strWebPath+'Images/Icon/Loading.gif" style="width: 50px; text-align: center;"></div>';return a}function setCookie(a,b,c){var d=new Date();d.setTime(d.getTime()+c);document.cookie=a+"="+escape(b)+";path=/;expires="+d.toGMTString()}function GetCookie(b){var d=document.cookie;var e=d.split("; ");var f;for(var c=0;c<e.length;c++){var a=e[c].split("=");if(b==a[0]){f=a[1];break}}return f}function AttachEvent(e,a,d,b){var c=d;if(b){eventHander=function(f){d.call(b,f)}}if(window.attachEvent){e.attachEvent("on"+a,eventHander)}else{e.addEventListener(a,eventHander,false)}}function getElementCoord(b){var a=b.offsetLeft;var d=b.offsetTop;while(b=b.offsetParent){a+=b.offsetLeft;d+=b.offsetTop}var c={x:a,y:d};return c}var getElementsByName=function(a,b){var d=document.getElementsByName(b);if(d.length>0){return d}d=new Array();var f=document.getElementsByTagName(a);for(var c=0;c<f.length;c++){if(f[c].getAttribute("name")==b){d[d.length]=f[c]}}return d};function replaceStr(b){var a=new RegExp("&lt;","g");b=b.replace(a,"<");a=new RegExp("&gt;","g");b=b.replace(a,">");a=new RegExp("&amp;","g");b=b.replace(a,"&");return b}function StringBuffer(){this._strings_=new Array}StringBuffer.prototype.append=function(a){this._strings_.push(a)};StringBuffer.prototype.toString=function(){return this._strings_.join("")};function SetQqButton(a){return"<a href='http://wpa.qq.com/msgrd?V=1&Uin="+a+"&Site=www.zjmainstay.cn&Menu=yes' target='_blank'><img title='点击这里给我发消息' alt='点击这里给我发消息' src='http://wpa.qq.com/pa?p=2:"+a+":41 &r=0.7619372549669843' border='0' complete='complete' /></a>("+a+")"
}function SetQqButton2(a){return'<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin='+a+'&site=qq&menu=yes"><img border="0" src="http://wpa.qq.com/pa?p=2:'+a+':51" alt="点击这里给我发消息" title="点击这里给我发消息"/></a>('+a+")"}function getElementsByClassName(h,b,l){node=h&&document.getElementById(h)||document;b=b||"*";l=l.split(" ");var c=l.length;for(var g=0,e=c;g<e;g++){l[g]=new RegExp("(^|\\s)"+l[g].replace(/\-/g,"\\-")+"(\\s|$)")}var a=node.getElementsByTagName(b);var m=[];for(var g=0,e=a.length,d=0;g<e;g++){var f=a[g];while(l[d++].test(f.className)){if(d===c){m[m.length]=f;break}}d=0}return m}function stopEvent(a){if(!a){a=window.event}if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}}var biRadixBase=2;var biRadixBits=16;var bitsPerDigit=biRadixBits;var biRadix=1<<16;var biHalfRadix=biRadix>>>1;var biRadixSquared=biRadix*biRadix;var maxDigitVal=biRadix-1;var maxInteger=9999999999999998;var maxDigits;var ZERO_ARRAY;var bigZero,bigOne;function setMaxDigits(b){maxDigits=b;ZERO_ARRAY=new Array(maxDigits);for(var a=0;a<ZERO_ARRAY.length;a++){ZERO_ARRAY[a]=0}bigZero=new BigInt();bigOne=new BigInt();bigOne.digits[0]=1}setMaxDigits(20);var dpl10=15;var lr10=biFromNumber(1000000000000000);function BigInt(a){if(typeof a=="boolean"&&a==true){this.digits=null}else{this.digits=ZERO_ARRAY.slice(0)}this.isNeg=false}function biFromDecimal(e){var d=e.charAt(0)=="-";var c=d?1:0;var a;while(c<e.length&&e.charAt(c)=="0"){++c}if(c==e.length){a=new BigInt()}else{var b=e.length-c;var f=b%dpl10;if(f==0){f=dpl10}a=biFromNumber(Number(e.substr(c,f)));c+=f;while(c<e.length){a=biAdd(biMultiply(a,lr10),biFromNumber(Number(e.substr(c,dpl10))));c+=dpl10}a.isNeg=d}return a}function biCopy(b){var a=new BigInt(true);a.digits=b.digits.slice(0);a.isNeg=b.isNeg;return a}function biFromNumber(c){var a=new BigInt();a.isNeg=c<0;c=Math.abs(c);var b=0;while(c>0){a.digits[b++]=c&maxDigitVal;c=Math.floor(c/biRadix)}return a}function reverseStr(c){var a="";for(var b=c.length-1;b>-1;--b){a+=c.charAt(b)}return a}var hexatrigesimalToChar=new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");function biToString(d,f){var c=new BigInt();c.digits[0]=f;var e=biDivideModulo(d,c);var a=hexatrigesimalToChar[e[1].digits[0]];while(biCompare(e[0],bigZero)==1){e=biDivideModulo(e[0],c);digit=e[1].digits[0];a+=hexatrigesimalToChar[e[1].digits[0]]}return(d.isNeg?"-":"")+reverseStr(a)}function biToDecimal(d){var c=new BigInt();c.digits[0]=10;var e=biDivideModulo(d,c);var a=String(e[1].digits[0]);while(biCompare(e[0],bigZero)==1){e=biDivideModulo(e[0],c);a+=String(e[1].digits[0])}return(d.isNeg?"-":"")+reverseStr(a)}var hexToChar=new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");function digitToHex(c){var b=15;var a="";for(i=0;i<4;++i){a+=hexToChar[c&b];c>>>=4}return reverseStr(a)}function biToHex(b){var a="";var d=biHighIndex(b);for(var c=biHighIndex(b);c>-1;--c){a+=digitToHex(b.digits[c])}return a}function charToHex(k){var d=48;var b=d+9;var e=97;var h=e+25;var g=65;var f=65+25;var a;if(k>=d&&k<=b){a=k-d}else{if(k>=g&&k<=f){a=10+k-g}else{if(k>=e&&k<=h){a=10+k-e}else{a=0}}}return a}function hexToDigit(d){var b=0;var a=Math.min(d.length,4);for(var c=0;c<a;++c){b<<=4;b|=charToHex(d.charCodeAt(c))}return b}function biFromHex(e){var b=new BigInt();var a=e.length;for(var d=a,c=0;d>0;d-=4,&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值