UNPKG

fkc

Version:

FKC application service framework.

115 lines 3.62 kB
'use strict'; const path = require('path'); const mine = require('./json/mine'); const multiparty = require( "multiparty" ); const fileType = (url)=>{ const ext = path.extname(url); return {url,type:mine(ext)}; } const getUrl = (url)=>{ let d = {} url.split('&').forEach(e => { e = e.split('='); d[e[0]] = e[1]; }); return d } module.exports = { getUrl, fileType, file(res,obj) { res.writeHead(200, { "Content-Type": obj.type + ";charset=utf-8"}); res.end(obj.data); }, body(res,obj){ if(obj.type=='json') obj.data = JSON.stringify(obj.data); res.writeHead(obj.status, { "Content-Type": `${mine('.'+obj.type)};charset=${obj.charset}`}); res.end(obj.data); }, error(res,data){ res.writeHead(400, { "Content-Type": "text/plain;charset=utf-8" }); res.end(data); }, json(res,data) { res.writeHead(200, { "Content-Type": "application/json;charset=utf-8" }); res.end(JSON.stringify(data)); }, repAll(str,url){ if(str==':'){ let reg = {}; const arr = url.split('/'); for (let i = 0;i < arr.length;i++) { const e = arr[i]; if(e&&e!==':'&&e.charAt(0)===':'){ reg[e.split(':')[1]] = i url = url.replace(new RegExp(e,'g'),'[^\\/]+'); } }; url = new RegExp(url+'$'); return {url,reg} }else if(str=='*'){ return new RegExp('^'+url.replace(/\./g,'\\.').replace(/\*/g,'[^\\/]+')+'$'); }else{ return url } }, getData(reg,url){ let d = {} url = url.split('/'); for (const i in reg) { d[i] = url[reg[i]] } return d; }, fileName(url){ let obj = fileType(url); let name = url.split('/'); obj.name = name[name.length-1]; return obj; }, upload(req,obj){ let arg = {}; if(obj.dir) arg.uploadDir = obj.dir; if(obj.kb&&obj.kb>0) arg.maxFilesSize = obj.kb*1024; if(obj.KB&&obj.KB>0) arg.totalFileSize = obj.KB*1024; if(obj.mb&&obj.mb>0) arg.maxFilesSize = obj.mb*1024*1024; if(obj.MB&&obj.MB>0) arg.totalFileSize = obj.MB*1024*1024; const form = new multiparty.Form(arg); return new Promise((resolve) => { form.parse(req,(e,data,file)=>{ if(e){ if(obj.err) obj.err(e.name+':'+e.message); resolve(null); }else{ if(obj.err) obj.err(null); resolve({data,file}); } }) }) }, async ctxs(req,ctx){ let res; if(req.fkc.upload){ res = await req.fkc.upload; if(res&&res.file) ctx.req.file = res.file; if(res&&res.data) ctx.req.data = {...res.data,...ctx.req.data}; } if(req.fkc.json){ res = await req.fkc.json; try { ctx.req.data = {...JSON.parse(res),...ctx.req.data}; } catch (error) { ctx.req.body = res; } } if(req.fkc.raw) { res = await req.fkc.raw; ctx.req.body = res; } if(req.fkc.urlencoded) { res = await req.fkc.urlencoded; ctx.req.data = getUrl(res); } return ctx; } }