2017-04-14 18:14:35 +00:00
|
|
|
var XLSX = require('xlsx');
|
|
|
|
var URL = require('url');
|
|
|
|
var request = require('request');
|
2017-04-16 08:17:21 +00:00
|
|
|
var send = require('send');
|
2017-04-14 18:14:35 +00:00
|
|
|
var micro = require('micro');
|
|
|
|
|
|
|
|
function do_url(req, url, res) {
|
|
|
|
request(url.query.url, {encoding:null}, function(err, response, body) {
|
|
|
|
if(err) return micro.send(res, 500, err);
|
|
|
|
switch(response.statusCode) {
|
|
|
|
case 200: break;
|
|
|
|
case 404: return micro.send(res, 404, "Cannot find " + url.query.url);
|
|
|
|
default: return micro.send(res, 500, "Unrecognized status code " + response.statusCode);
|
|
|
|
}
|
|
|
|
var wb = XLSX.read(body, {type:'buffer'});
|
|
|
|
var N = url.query.N ? parseInt(url.query.N,10) : 0;
|
2017-04-14 21:29:19 +00:00
|
|
|
if(N < 0) {
|
|
|
|
switch(url.query.t || "csv") {
|
|
|
|
case "json": return micro.send(res, 200, JSON.stringify(wb.SheetNames.join("\n")));
|
|
|
|
default: return micro.send(res, 200, wb.SheetNames.join("\n"));
|
|
|
|
}
|
|
|
|
}
|
2017-04-14 18:14:35 +00:00
|
|
|
if(N >= wb.SheetNames.length) return micro.send(res, 500, "Cannot find sheet " + N);
|
2017-04-14 21:29:19 +00:00
|
|
|
var ws = wb.Sheets[wb.SheetNames[N]];
|
|
|
|
switch(url.query.t) {
|
|
|
|
case "json": return micro.send(res, 200, JSON.stringify(XLSX.utils.sheet_to_json(ws, {header:1, raw:true})));
|
2017-04-16 08:17:21 +00:00
|
|
|
case "html": return XLSX.stream.to_html(ws).pipe(res);
|
2017-04-14 21:29:19 +00:00
|
|
|
default: XLSX.stream.to_csv(ws).pipe(res);
|
|
|
|
}
|
2017-04-14 18:14:35 +00:00
|
|
|
});
|
|
|
|
}
|
2017-04-16 08:17:21 +00:00
|
|
|
send.mime.default_type="text/html";
|
2017-04-14 18:14:35 +00:00
|
|
|
module.exports = function(req, res) {
|
|
|
|
var url = URL.parse(req.url, true);
|
2017-04-16 08:17:21 +00:00
|
|
|
if(url.pathname == "/") {
|
|
|
|
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
|
|
|
|
return send(req, "index.html").pipe(res);
|
|
|
|
}
|
|
|
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
2017-04-14 18:14:35 +00:00
|
|
|
var mode = -1;
|
|
|
|
if(url.query.url) mode = 0;
|
|
|
|
if(mode == -1) return micro.send(res, 500, "Must issue command");
|
|
|
|
switch(mode) {
|
|
|
|
case 0: return do_url(req, url, res);
|
|
|
|
}
|
|
|
|
};
|