| 
                         下面以 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; 
 - } 
 
                          (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |