fkc
Version:
FKC application service framework.
115 lines • 3.62 kB
JavaScript
;
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;
}
}