mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
refactor(rest) add get, put, delete
This commit is contained in:
parent
ae4cf5bfb0
commit
c8ccbaade9
4 changed files with 221 additions and 181 deletions
|
|
@ -16,14 +16,15 @@
|
|||
var main = global.cloudcmd.main,
|
||||
fs = main.fs,
|
||||
path = main.path,
|
||||
Hash = main.hash,
|
||||
crypto = main.crypto,
|
||||
Util = main.util,
|
||||
pipe = main.pipe,
|
||||
CloudFunc = main.cloudfunc,
|
||||
dir = main.dir,
|
||||
diff = main.diff,
|
||||
time = main.time,
|
||||
|
||||
onFSGet = main.srvrequire('rest/fs/get').onGet,
|
||||
onFSPut = main.srvrequire('rest/fs/put').onPut,
|
||||
onDelete = main.srvrequire('rest/fs/delete').onDelete,
|
||||
|
||||
JSONDIR = main.JSONDIR,
|
||||
OK = 200,
|
||||
sendError = main.sendError,
|
||||
|
|
@ -33,8 +34,6 @@
|
|||
}),
|
||||
|
||||
fse = main.require('fs-extra') || {
|
||||
remove : fs.rmdir.bind(fs),
|
||||
mkdirs : fs.mkdir.bind(fs),
|
||||
copy : function(from, to, callback) {
|
||||
pipe.create({
|
||||
from : from,
|
||||
|
|
@ -179,181 +178,6 @@
|
|||
return ret;
|
||||
}
|
||||
|
||||
function onFSPut(name, query, readStream, callback) {
|
||||
var func = Util.retExec(callback),
|
||||
baseName = path.basename(name);
|
||||
|
||||
switch(query) {
|
||||
case 'dir':
|
||||
fse.mkdirs(name, function(error) {
|
||||
var msg;
|
||||
|
||||
if (!error)
|
||||
msg = CloudFunc.formatMsg('make dir', name);
|
||||
|
||||
func(error, msg);
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
pipe.create({
|
||||
read : readStream,
|
||||
to : name,
|
||||
callback : function(error) {
|
||||
var msg;
|
||||
|
||||
if (!error)
|
||||
msg = CloudFunc.formatMsg('save', baseName);
|
||||
|
||||
func(error, msg);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case 'patch':
|
||||
getBody(readStream, function(patch) {
|
||||
fs.readFile(name, 'utf8', read);
|
||||
|
||||
function read(error, data) {
|
||||
var diffResult;
|
||||
|
||||
if (error)
|
||||
func(error);
|
||||
else {
|
||||
error = Util.tryCatchLog(function() {
|
||||
diffResult = diff.applyPatch(data, patch);
|
||||
});
|
||||
|
||||
if (diffResult && !error)
|
||||
fs.writeFile(name, diffResult, write);
|
||||
else {
|
||||
msg = CloudFunc.formatMsg('patch', baseName, 'fail');
|
||||
func(null, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function write(name, error) {
|
||||
var msg;
|
||||
|
||||
if (!error)
|
||||
msg = CloudFunc.formatMsg('patch', baseName);
|
||||
|
||||
func(error, msg);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onDelete(name, files, query, callback) {
|
||||
var i, n, onStat, isDirFunc,
|
||||
assync = 0,
|
||||
rmFile = fs.unlink.bind(fs),
|
||||
rmDir = fse.remove.bind(fse),
|
||||
func = Util.retExec(callback);
|
||||
|
||||
switch(query) {
|
||||
default:
|
||||
rmFile(name, func);
|
||||
break;
|
||||
|
||||
case 'dir':
|
||||
rmDir(name, func);
|
||||
break;
|
||||
|
||||
case 'files':
|
||||
n = files && files.length,
|
||||
dir = name;
|
||||
|
||||
onIsDir = function(name, error, isDir) {
|
||||
var log = Util.log.bind(Util);
|
||||
++assync;
|
||||
|
||||
if (error)
|
||||
func(error);
|
||||
else {
|
||||
if (isDir)
|
||||
rmDir(name, log);
|
||||
else
|
||||
rmFile(name, log);
|
||||
|
||||
if (assync === n)
|
||||
func();
|
||||
}
|
||||
};
|
||||
|
||||
for (i = 0; i < n; i ++) {
|
||||
name = dir + files[i];
|
||||
isDirFunc = Util.bind(onIsDir, name);
|
||||
|
||||
dir.isDir(name, isDirFunc);
|
||||
Util.log(name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onFSGet(query, name, callback) {
|
||||
var error, hash,
|
||||
func = Util.retExec(callback);
|
||||
|
||||
switch (query) {
|
||||
case 'size':
|
||||
dir.getSize(name, function(error, size) {
|
||||
if (!error)
|
||||
size = CloudFunc.getShortSize(size);
|
||||
|
||||
func(error, size);
|
||||
});
|
||||
break;
|
||||
|
||||
case 'time':
|
||||
time.get(name, function(error, time) {
|
||||
var timeStr;
|
||||
|
||||
if (!error)
|
||||
timeStr = time.toString();
|
||||
|
||||
func(error, timeStr);
|
||||
});
|
||||
break;
|
||||
|
||||
case 'hash':
|
||||
hash = Hash.create();
|
||||
|
||||
if (!hash) {
|
||||
error = 'not suported, try update node';
|
||||
error = CloudFunc.formatMsg('hash', error, 'error');
|
||||
func(error);
|
||||
} else
|
||||
pipe.create({
|
||||
from : name,
|
||||
write : hash,
|
||||
callback : function (error) {
|
||||
var hex;
|
||||
|
||||
if (!error)
|
||||
hash = hash.get();
|
||||
|
||||
func(error, hash);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
dir.isDir(name, function(error, isDir) {
|
||||
var getDirContent = main.commander.getDirContent;
|
||||
|
||||
if (isDir && !error)
|
||||
getDirContent(name, func);
|
||||
else
|
||||
func(error, null, !isDir);
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* process data on GET request
|
||||
*
|
||||
|
|
|
|||
60
lib/server/rest/fs/delete.js
Normal file
60
lib/server/rest/fs/delete.js
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
(function(){
|
||||
'use strict';
|
||||
|
||||
var main = global.cloudcmd.main,
|
||||
fs = require('fs'),
|
||||
Util = main.util,
|
||||
fse = main.require('fs-extra') || {
|
||||
remove : fs.rmdir.bind(fs),
|
||||
};
|
||||
|
||||
exports.onDelete = onDelete;
|
||||
|
||||
function onDelete(name, files, query, callback) {
|
||||
var i, n, onStat, isDirFunc,
|
||||
assync = 0,
|
||||
rmFile = fs.unlink.bind(fs),
|
||||
rmDir = fse.remove.bind(fse),
|
||||
func = Util.retExec(callback);
|
||||
|
||||
switch(query) {
|
||||
default:
|
||||
rmFile(name, func);
|
||||
break;
|
||||
|
||||
case 'dir':
|
||||
rmDir(name, func);
|
||||
break;
|
||||
|
||||
case 'files':
|
||||
n = files && files.length,
|
||||
dir = name;
|
||||
|
||||
onIsDir = function(name, error, isDir) {
|
||||
var log = Util.log.bind(Util);
|
||||
++assync;
|
||||
|
||||
if (error)
|
||||
func(error);
|
||||
else {
|
||||
if (isDir)
|
||||
rmDir(name, log);
|
||||
else
|
||||
rmFile(name, log);
|
||||
|
||||
if (assync === n)
|
||||
func();
|
||||
}
|
||||
};
|
||||
|
||||
for (i = 0; i < n; i ++) {
|
||||
name = dir + files[i];
|
||||
isDirFunc = Util.bind(onIsDir, name);
|
||||
|
||||
dir.isDir(name, isDirFunc);
|
||||
Util.log(name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
})();
|
||||
73
lib/server/rest/fs/get.js
Normal file
73
lib/server/rest/fs/get.js
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
var main = global.cloudcmd.main,
|
||||
Hash = main.hash,
|
||||
dir = main.dir,
|
||||
time = main.time,
|
||||
pipe = main.pipe,
|
||||
CloudFunc = main.cloudfunc,
|
||||
Util = main.util;
|
||||
|
||||
exports.onGet = onGet;
|
||||
|
||||
function onGet(query, name, callback) {
|
||||
var error, hash,
|
||||
func = Util.retExec(callback);
|
||||
|
||||
switch (query) {
|
||||
case 'size':
|
||||
dir.getSize(name, function(error, size) {
|
||||
if (!error)
|
||||
size = CloudFunc.getShortSize(size);
|
||||
|
||||
func(error, size);
|
||||
});
|
||||
break;
|
||||
|
||||
case 'time':
|
||||
time.get(name, function(error, time) {
|
||||
var timeStr;
|
||||
|
||||
if (!error)
|
||||
timeStr = time.toString();
|
||||
|
||||
func(error, timeStr);
|
||||
});
|
||||
break;
|
||||
|
||||
case 'hash':
|
||||
hash = Hash.create();
|
||||
|
||||
if (!hash) {
|
||||
error = 'not suported, try update node';
|
||||
error = CloudFunc.formatMsg('hash', error, 'error');
|
||||
func(error);
|
||||
} else
|
||||
pipe.create({
|
||||
from : name,
|
||||
write : hash,
|
||||
callback : function (error) {
|
||||
var hex;
|
||||
|
||||
if (!error)
|
||||
hash = hash.get();
|
||||
|
||||
func(error, hash);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
dir.isDir(name, function(error, isDir) {
|
||||
var getDirContent = main.commander.getDirContent;
|
||||
|
||||
if (isDir && !error)
|
||||
getDirContent(name, func);
|
||||
else
|
||||
func(error, null, !isDir);
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
})();
|
||||
83
lib/server/rest/fs/put.js
Normal file
83
lib/server/rest/fs/put.js
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
(function(){
|
||||
'use strict';
|
||||
|
||||
var main = global.cloudcmd.main,
|
||||
Util = main.util,
|
||||
pipe = main.pipe,
|
||||
path = require('path'),
|
||||
fs = require('fs'),
|
||||
diff = main.diff,
|
||||
CloudFunc = main.cloudfunc,
|
||||
fse = main.require('fs-extra') || {
|
||||
mkdirs : fs.mkdir.bind(fs),
|
||||
};
|
||||
|
||||
exports.onPut = onPut;
|
||||
|
||||
function onPut(name, query, readStream, callback) {
|
||||
var func = Util.retExec(callback),
|
||||
baseName = path.basename(name);
|
||||
|
||||
switch(query) {
|
||||
case 'dir':
|
||||
fse.mkdirs(name, function(error) {
|
||||
var msg;
|
||||
|
||||
if (!error)
|
||||
msg = CloudFunc.formatMsg('make dir', name);
|
||||
|
||||
func(error, msg);
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
pipe.create({
|
||||
read : readStream,
|
||||
to : name,
|
||||
callback : function(error) {
|
||||
var msg;
|
||||
|
||||
if (!error)
|
||||
msg = CloudFunc.formatMsg('save', baseName);
|
||||
|
||||
func(error, msg);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case 'patch':
|
||||
getBody(readStream, function(patch) {
|
||||
fs.readFile(name, 'utf8', read);
|
||||
|
||||
function read(error, data) {
|
||||
var diffResult;
|
||||
|
||||
if (error)
|
||||
func(error);
|
||||
else {
|
||||
error = Util.tryCatchLog(function() {
|
||||
diffResult = diff.applyPatch(data, patch);
|
||||
});
|
||||
|
||||
if (diffResult && !error)
|
||||
fs.writeFile(name, diffResult, write);
|
||||
else {
|
||||
msg = CloudFunc.formatMsg('patch', baseName, 'fail');
|
||||
func(null, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function write(name, error) {
|
||||
var msg;
|
||||
|
||||
if (!error)
|
||||
msg = CloudFunc.formatMsg('patch', baseName);
|
||||
|
||||
func(error, msg);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue