|
@@ -0,0 +1,125 @@
|
|
|
+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;
|