123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- 'use strict'
- const query = require("querystring");
- const base64 = require('js-base64').Base64;
- var API = {
- parse:function(req,res){
- let url = req.url;
- let URLParse = URL.parse(url,true);
- let 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){
- let oldLink = req.param['url'];
- let qr = 0;
- if(req.param['qr'] && Number(req.param['qr'])==1) qr = 1;
- if(req.param['base64'] && req.param['base64']==0){
- if(oldLink.match(/http(s)?:\/\//)){
- MongoHandler.getlink(req.param['key'],oldLink,res,qr);
- }else{
- API._onError(ErrorMsg.URL_WRONG,res);
- return;
- }
- }else{
- oldLink = base64.decode(oldLink);
- if(oldLink.match(/http(s)?:\/\//)){
- MongoHandler.getlink(req.param['key'],oldLink,res,qr);
- }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','Access-Control-Allow-Origin':'*'});
- res.write(JSON.stringify(data));
- res.end();
- }
- }
- var MongoHandler = {
- getlink:function(key,url,res,qr){
- let baseLink;
- baseLink = base64.encode(url);
- // console.log(baseLink,newLink);
- LinkDB.findOne({long:baseLink},function(err,oldOne){
- if(!err){
- let data = {success:1,msg:'',short:SystemURL,long:url};
- if(oldOne){
- data.short += oldOne.short;
- if(qr) data.qr = SystemURL+'static/qrs'+QRHandler.getQR(oldOne.short);
- res.writeHead(200, {'Content-Type': 'text/json','Access-Control-Allow-Origin':'*'});
- res.write(JSON.stringify(data));
- res.end();
- }else{
- let newLink,count = COUNT.link+1;
- newLink = count.toString(36);
- LinkDB.update({key:key,long:baseLink},{$set:{short:newLink}},{upsert:true},function(err,result){
- if(!err && result){
- data.short += newLink;
- if(qr) data.qr = SystemURL+'static/qrs'+QRHandler.getQR(newLink);
- res.writeHead(200, {'Content-Type': 'text/json','Access-Control-Allow-Origin':'*'});
- 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);
- }
- });
- }
- }
- var QRHandler = {
- getQR:function(tagName){
- let qrImgPath = '/'+tagName+'.png';
- if(!FILE.exists(QRPATH+qrImgPath)){
- let qr = new QR({value:SystemURL+'/'+tagName});
- let qrData = qr.toDataURL().replace(/^data:image\/\w+;base64,/, "");
- FILE.writeFileSync(QRPATH+qrImgPath,new Buffer(qrData, 'base64'),'binary');
- }
- return qrImgPath;
- }
- }
- 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://" or "https://"',
- MAKE_ERROR :'Short link generate error,please contact with l2s.ch'
- }
- module.exports = API;
|