| 下面以 Node.js 为例讲解后端需要做的事情 
    首先后端设置接口路由获取路由后面的参数根据业务需要根据 SQL 语句生成对应的数据。如果是数字部分,则需要按照上面约定的方法加以转换。将生成数据转换成 JSON 返回给调用者 // json var JoinOparatorSymbol = "3.1415926"; function encode(rawData, ruleType) {   if (!isNotEmptyStr(rawData)) {     return "";   }   var date = new Date();   var year = date.getFullYear();   var month = date.getMonth() + 1;   var day = date.getDate();    var encodeData = "";   for (var index = 0; index < rawData.length; index++) {     var datacomponent = rawData[index];     if (!isNaN(datacomponent)) {       if (ruleType < 3) {         var currentNumber = rawDataMap(String(datacomponent), ruleType);         encodeData += (currentNumber * month + day) + JoinOparatorSymbol;       }       else if (ruleType == 4) {         encodeData += rawDataMap(String(datacomponent), ruleType);       }       else {         encodeData += rawDataMap(String(datacomponent), ruleType) + JoinOparatorSymbol;       }     }     else if (ruleType == 4) {       encodeData += rawDataMap(String(datacomponent), ruleType);     }    }   if (encodeData.length >= JoinOparatorSymbol.length) {     var lastTwoString = encodeData.substring(encodeData.length - JoinOparatorSymbol.length, encodeData.length);     if (lastTwoString == JoinOparatorSymbol) {       encodeData = encodeData.substring(0, encodeData.length - JoinOparatorSymbol.length);     }   } 
 //字体映射处理 function rawDataMap(rawData, ruleType) {    if (!isNotEmptyStr(rawData) || !isNotEmptyStr(ruleType)) {     return;   }   var mapData;   var rawNumber = parseInt(rawData);   var ruleTypeNumber = parseInt(ruleType);   if (!isNaN(rawData)) {     lastNumberCategory = ruleTypeNumber;     //字体文件1下的数据加密规则     if (ruleTypeNumber == 1) {       if (rawNumber == 1) {         mapData = 1;       }       else if (rawNumber == 2) {         mapData = 2;       }       else if (rawNumber == 3) {         mapData = 4;       }       else if (rawNumber == 4) {         mapData = 5;       }       else if (rawNumber == 5) {         mapData = 3;       }       else if (rawNumber == 6) {         mapData = 8;       }       else if (rawNumber == 7) {         mapData = 6;       }       else if (rawNumber == 8) {         mapData = 9;       }       else if (rawNumber == 9) {         mapData = 7;       }       else if (rawNumber == 0) {         mapData = 0;       }     }     //字体文件2下的数据加密规则     else if (ruleTypeNumber == 0) {        if (rawNumber == 1) {         mapData = 4;       }       else if (rawNumber == 2) {         mapData = 2;       }       else if (rawNumber == 3) {         mapData = 3;       }       else if (rawNumber == 4) {         mapData = 1;       }       else if (rawNumber == 5) {         mapData = 8;       }       else if (rawNumber == 6) {         mapData = 5;       }       else if (rawNumber == 7) {         mapData = 6;       }       else if (rawNumber == 8) {         mapData = 7;       }       else if (rawNumber == 9) {         mapData = 9;       }       else if (rawNumber == 0) {         mapData = 0;       }     }     //字体文件3下的数据加密规则     else if (ruleTypeNumber == 2) {        if (rawNumber == 1) {         mapData = 6;       }       else if (rawNumber == 2) {         mapData = 2;       }       else if (rawNumber == 3) {         mapData = 1;       }       else if (rawNumber == 4) {         mapData = 3;       }       else if (rawNumber == 5) {         mapData = 4;       }       else if (rawNumber == 6) {         mapData = 8;       }       else if (rawNumber == 7) {         mapData = 3;       }       else if (rawNumber == 8) {         mapData = 7;       }       else if (rawNumber == 9) {         mapData = 9;       }       else if (rawNumber == 0) {         mapData = 0;       }     }     else if (ruleTypeNumber == 3) {        if (rawNumber == 1) {         mapData = "";       }       else if (rawNumber == 2) {         mapData = "";       }       else if (rawNumber == 3) {         mapData = "";       }       else if (rawNumber == 4) {         mapData = "";       }       else if (rawNumber == 5) {         mapData = "";       }       else if (rawNumber == 6) {         mapData = "";       }       else if (rawNumber == 7) {         mapData = "";       }       else if (rawNumber == 8) {         mapData = "";       }       else if (rawNumber == 9) {         mapData = "";       }       else if (rawNumber == 0) {         mapData = "";       }     }     else{       mapData = rawNumber;     }   } else if (ruleTypeNumber == 4) {     var sources = ["年", "万", "业", "人", "信", "元", "千", "司", "州", "资", "造", "钱"];     //判断字符串为汉字     if (/^[u4e00-u9fa5]*$/.test(rawData)) {        if (sources.indexOf(rawData) > -1) {         var currentChineseHexcod = rawData.charCodeAt(0).toString(16);         var lastCompoent;         var mapComponetnt;         var numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];         var characters = ["a", "b", "c", "d", "e", "f", "g", "h", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];          if (currentChineseHexcod.length == 4) {           lastCompoent = currentChineseHexcod.substr(3, 1);           var locationInComponents = 0;           if (/[0-9]/.test(lastCompoent)) {             locationInComponents = numbers.indexOf(lastCompoent);             mapComponetnt = numbers[(locationInComponents + 1) % 10];           }           else if (/[a-z]/.test(lastCompoent)) {             locationInComponents = characters.indexOf(lastCompoent);             mapComponetnt = characters[(locationInComponents + 1) % 26];           }           mapData = "&#x" + currentChineseHexcod.substr(0, 3) + mapComponetnt + ";";         }       } else {         mapData = rawData;       }      }     else if (/[0-9]/.test(rawData)) {       mapData = rawDataMap(rawData, 2);     }     else {       mapData = rawData;     }    }   return mapData; } 
 //api module.exports = {     "GET /api/products": async (ctx, next) => {         ctx.response.type = "application/json";         ctx.response.body = {             products: products         };     },      "GET /api/solution1": async (ctx, next) => {          try {             var data = fs.readFileSync(pathname, "utf-8");             ruleJson = JSON.parse(data);             rule = ruleJson.data.rule;         } catch (error) {             console.log("fail: " + error);         }          var data = {             code: 200,             message: "success",             data: {                 name: "@杭城小刘",                 year: LBPEncode("1995", rule),                 month: LBPEncode("02", rule),                 day: LBPEncode("20", rule),                 analysis : rule             }         }          ctx.set("Access-Control-Allow-Origin", "*");         ctx.response.type = "application/json";         ctx.response.body = data;     },       "GET /api/solution2": async (ctx, next) => {         try {             var data = fs.readFileSync(pathname, "utf-8");             ruleJson = JSON.parse(data);             rule = ruleJson.data.rule;         } catch (error) {             console.log("fail: " + error);         }          var data = {             code: 200,             message: "success",             data: {                 name: LBPEncode("建造师",rule),                 birthday: LBPEncode("1995年02月20日",rule),                 company: LBPEncode("中天公司",rule),                 address: LBPEncode("浙江省杭州市拱墅区石祥路",rule),                 bidprice: LBPEncode("2万元",rule),                 negative: LBPEncode("2018年办事效率太高、负面基本没有",rule),                 title: LBPEncode("建造师",rule),                 honor: LBPEncode("最佳奖",rule),                 analysis : rule             }         }         ctx.set("Access-Control-Allow-Origin", "*");         ctx.response.type = "application/json";         ctx.response.body = data;     },      "POST /api/products": async (ctx, next) => {         var p = {             name: ctx.request.body.name,             price: ctx.request.body.price         };         products.push(p);         ctx.response.type = "application/json";         ctx.response.body = p;     } }; 
 //路由 const fs = require("fs");  function addMapping(router, mapping){     for(var url in mapping){         if (url.startsWith("GET")) {             var path = url.substring(4);             router.get(path,mapping[url]);             console.log(`Register URL mapping: GET: ${path}`);         }else if (url.startsWith('POST ')) {             var path = url.substring(5);             router.post(path, mapping[url]);             console.log(`Register URL mapping: POST ${path}`);         } else if (url.startsWith('PUT ')) {             var path = url.substring(4);             router.put(path, mapping[url]);             console.log(`Register URL mapping: PUT ${path}`);         } else if (url.startsWith('DELETE ')) {             var path = url.substring(7);             router.del(path, mapping[url]);             console.log(`Register URL mapping: DELETE ${path}`);         } else {             console.log(`Invalid URL: ${url}`);         }      } }   function addControllers(router, dir){     fs.readdirSync(__dirname + "/" + dir).filter( (f) => {         return f.endsWith(".js");     }).forEach( (f) => {         console.log(`Process controllers:${f}...`);         let mapping = require(__dirname + "/" + dir + "/" + f);         addMapping(router,mapping);     }); }  module.exports = function(dir){     let controllers = dir || "controller";     let router = require("koa-router")();      addControllers(router,controllers);     return router.routes(); }; 
 $("#year").html(getRawData(data.year,log));  // util.js var JoinOparatorSymbol = "3.1415926"; function isNotEmptyStr($str) {   if (String($str) == "" || $str == undefined || $str == null || $str == "null") {     return false;   }   return true; }  function getRawData($json,analisys) {   $json = $json.toString();   if (!isNotEmptyStr($json)) {     return;   }      var date= new Date();   var year = date.getFullYear();   var month = date.getMonth() + 1;   var day = date.getDate();   var datacomponents = $json.split(JoinOparatorSymbol);   var orginalMessage = "";   for(var index = 0;index < datacomponents.length;index++){     var datacomponent = datacomponents[index];       if (!isNaN(datacomponent) && analisys < 3){           var currentNumber = parseInt(datacomponent);           orginalMessage += (currentNumber -  day)/month;       }       else if(analisys == 3){          orginalMessage += datacomponent;       }       else{         //其他情况待续,本 Demo 根据本人在研究反爬方面的技术并实践后持续更新       }   }   return orginalMessage; } 
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |