const query = require("querystring"); const base64 = require('js-base64').Base64; var API = { parse:function(req,res){ var url = req.url; var URLParse = URL.parse(url,true); var URLArr = URLParse.pathname.split('/'); //Only GET req.param = URLParse.query; // console.log(URLParse.query); API._checkRouter(URLArr[1],req,res); // }else{ // var postdata = ""; // req.addListener("data",function(postchunk){ // postdata += postchunk; // }) // //POST结束输出结果 // req.addListener("end",function(){ // req.param = query.parse(postdata); // API._checkRouter(URLArr[1],req,res); // }) // } }, _checkRouter:function(path,req,res){ // console.log(req.param); switch(path){ case 'getlink': if(req.param['key'] && req.param['key']!='' && req.param['url'] && req.param['url']!=''){ UserDB.findOne({key:req.param['key']},function(err,data){ if(!err && data){ var oldLink = req.param['url']; if(req.param['base64'] && req.param['base64']==0){ if(oldLink.match(/http:\/\//)){ MongoHandler.getlink(req.param['key'],oldLink,res); }else{ API._onError(ErrorMsg.URL_WRONG,res); return; } }else{ oldLink = base64.decode(oldLink); if(oldLink.match(/http:\/\//)){ MongoHandler.getlink(req.param['key'],oldLink,res); }else{ API._onError(ErrorMsg.URL_WRONG,res); return; } } }else{ API._onError(ErrorMsg.KEY_WRONG,res); } }); }else{ if(!req.param['key']){ API._onError(ErrorMsg.KEY_LOST,res); return; } if(!req.param['url']){ API._onError(ErrorMsg.URL_LOST,res); return; } } break; case 'check': break; default: res.writeHead(404, {'Content-Type': 'text/html'}); res.end('404'); } }, _onError:function(msg,res){ var data = {success:0,msg:msg,short:'',long:''}; res.writeHead(200, {'Content-Type': 'text/json'}); res.write(JSON.stringify(data)); res.end(); } } var MongoHandler = { getlink:function(key,url,res){ var baseLink; baseLink = base64.encode(url); // console.log(baseLink,newLink); LinkDB.findOne({long:baseLink},function(err,oldOne){ if(!err){ var data = {success:1,msg:'',short:'http://l2s.ch/',long:url}; if(oldOne){ data.short += oldOne.short; res.writeHead(200, {'Content-Type': 'text/json'}); res.write(JSON.stringify(data)); res.end(); }else{ var newLink,count = COUNT.link+1; newLink = count.toString(16); LinkDB.update({key:key,long:baseLink},{$set:{short:newLink}},{upsert:true},function(err,result){ if(!err && result){ data.short += newLink; res.writeHead(200, {'Content-Type': 'text/json'}); res.write(JSON.stringify(data)); res.end(); COUNT.link++; CountDB.update({},{$inc:{link:1}},{upsert:true}); }else{ API._onError(ErrorMsg.MAKE_ERROR,res); } }); } }else{ API._onError(ErrorMsg.MAKE_ERROR,res); } }); } } const ErrorMsg = { NONE:'', KEY_LOST :'Key is missing', KEY_WRONG :'Key is incorrect', URL_LOST :'URL is missing ', URL_WRONG :'URL must start with "http://"', MAKE_ERROR :'Short link generate error,please contact with l2s.ch' } module.exports = API;