api.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. const query = require("querystring");
  2. const base64 = require('js-base64').Base64;
  3. var API = {
  4. parse:function(req,res){
  5. var url = req.url;
  6. var URLParse = URL.parse(url,true);
  7. var URLArr = URLParse.pathname.split('/');
  8. //Only GET
  9. req.param = URLParse.query;
  10. // console.log(URLParse.query);
  11. API._checkRouter(URLArr[1],req,res);
  12. // }else{
  13. // var postdata = "";
  14. // req.addListener("data",function(postchunk){
  15. // postdata += postchunk;
  16. // })
  17. // //POST结束输出结果
  18. // req.addListener("end",function(){
  19. // req.param = query.parse(postdata);
  20. // API._checkRouter(URLArr[1],req,res);
  21. // })
  22. // }
  23. },
  24. _checkRouter:function(path,req,res){
  25. // console.log(req.param);
  26. switch(path){
  27. case 'getlink':
  28. if(req.param['key'] && req.param['key']!='' && req.param['url'] && req.param['url']!=''){
  29. UserDB.findOne({key:req.param['key']},function(err,data){
  30. if(!err && data){
  31. var oldLink = req.param['url'];
  32. if(req.param['base64'] && req.param['base64']==0){
  33. if(oldLink.match(/http:\/\//)){
  34. MongoHandler.getlink(req.param['key'],oldLink,res);
  35. }else{
  36. API._onError(ErrorMsg.URL_WRONG,res);
  37. return;
  38. }
  39. }else{
  40. oldLink = base64.decode(oldLink);
  41. if(oldLink.match(/http:\/\//)){
  42. MongoHandler.getlink(req.param['key'],oldLink,res);
  43. }else{
  44. API._onError(ErrorMsg.URL_WRONG,res);
  45. return;
  46. }
  47. }
  48. }else{
  49. API._onError(ErrorMsg.KEY_WRONG,res);
  50. }
  51. });
  52. }else{
  53. if(!req.param['key']){
  54. API._onError(ErrorMsg.KEY_LOST,res);
  55. return;
  56. }
  57. if(!req.param['url']){
  58. API._onError(ErrorMsg.URL_LOST,res);
  59. return;
  60. }
  61. }
  62. break;
  63. case 'check':
  64. break;
  65. default:
  66. res.writeHead(404, {'Content-Type': 'text/html'});
  67. res.end('404');
  68. }
  69. },
  70. _onError:function(msg,res){
  71. var data = {success:0,msg:msg,short:'',long:''};
  72. res.writeHead(200, {'Content-Type': 'text/json'});
  73. res.write(JSON.stringify(data));
  74. res.end();
  75. }
  76. }
  77. var MongoHandler = {
  78. getlink:function(key,url,res){
  79. var baseLink;
  80. baseLink = base64.encode(url);
  81. // console.log(baseLink,newLink);
  82. LinkDB.findOne({long:baseLink},function(err,oldOne){
  83. if(!err){
  84. var data = {success:1,msg:'',short:'http://l2s.ch/',long:url};
  85. if(oldOne){
  86. data.short += oldOne.short;
  87. res.writeHead(200, {'Content-Type': 'text/json'});
  88. res.write(JSON.stringify(data));
  89. res.end();
  90. }else{
  91. var newLink,count = COUNT.link+1;
  92. newLink = count.toString(16);
  93. LinkDB.update({key:key,long:baseLink},{$set:{short:newLink}},{upsert:true},function(err,result){
  94. if(!err && result){
  95. data.short += newLink;
  96. res.writeHead(200, {'Content-Type': 'text/json'});
  97. res.write(JSON.stringify(data));
  98. res.end();
  99. COUNT.link++;
  100. CountDB.update({},{$inc:{link:1}},{upsert:true});
  101. }else{
  102. API._onError(ErrorMsg.MAKE_ERROR,res);
  103. }
  104. });
  105. }
  106. }else{
  107. API._onError(ErrorMsg.MAKE_ERROR,res);
  108. }
  109. });
  110. }
  111. }
  112. const ErrorMsg = {
  113. NONE:'',
  114. KEY_LOST :'Key is missing',
  115. KEY_WRONG :'Key is incorrect',
  116. URL_LOST :'URL is missing ',
  117. URL_WRONG :'URL must start with "http://"',
  118. MAKE_ERROR :'Short link generate error,please contact with l2s.ch'
  119. }
  120. module.exports = API;