forked from sheetjs/sheetjs
		
	Refresh server demos
- microjs demo removed - hapi.js demo does not work in latest version
This commit is contained in:
		
							parent
							
								
									1d7aff45c8
								
							
						
					
					
						commit
						e958dbf18e
					
				@ -1,6 +1,5 @@
 | 
			
		||||
.PHONY: init
 | 
			
		||||
init:
 | 
			
		||||
	if [ ! -e sheetjs.xlsx ]; then ln -s ../../sheetjs.xlsx; fi
 | 
			
		||||
	mkdir -p node_modules
 | 
			
		||||
	cd node_modules; if [ ! -e xlsx ]; then ln -s ../../../ xlsx; fi; cd -
 | 
			
		||||
 | 
			
		||||
@ -12,10 +11,6 @@ request: init ## request demo
 | 
			
		||||
express: init ## express demo
 | 
			
		||||
	node express.js
 | 
			
		||||
 | 
			
		||||
.PHONY: micro
 | 
			
		||||
micro: init ## micro demo
 | 
			
		||||
	micro -p 7262 micro.js
 | 
			
		||||
 | 
			
		||||
.PHONY: koa
 | 
			
		||||
koa: init ## koa demo
 | 
			
		||||
	node koa.js
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,38 @@ demo shows a few different strategies applied to different server frameworks.
 | 
			
		||||
NOTE: these examples merely demonstrate the core concepts and do not include
 | 
			
		||||
appropriate error checking or other production-level features.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Express Setup
 | 
			
		||||
 | 
			
		||||
The following commands are required in order to test the [Express](https://github.com/expressjs/express) demo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install express printj xlsx express-formidable
 | 
			
		||||
node express.js
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Koa Setup
 | 
			
		||||
 | 
			
		||||
The following commands are required in order to test the [Koa](https://github.com/koajs/koa) demo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install koa printj formidable xlsx
 | 
			
		||||
node koa.js
 | 
			
		||||
``` 
 | 
			
		||||
 | 
			
		||||
### Hapi Setup
 | 
			
		||||
 | 
			
		||||
**Note: Hapi demo as written only works with Hapi version 16 and below.**
 | 
			
		||||
 | 
			
		||||
The following commands are required in order to test the [Hapi](https://github.com/hapijs/hapi) demo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install hapi@16.x printj tiny-worker xlsx
 | 
			
		||||
node hapi.js
 | 
			
		||||
``` 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Node Buffer
 | 
			
		||||
 | 
			
		||||
The `read` and `write` functions can handle `Buffer` data with `type:"buffer"`.
 | 
			
		||||
@ -64,12 +96,12 @@ expected to handle:
 | 
			
		||||
Testing with cURL is straightforward:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# upload test.xls and update data
 | 
			
		||||
curl -X POST -F "data=@test.xls" http://localhost:7262/
 | 
			
		||||
# upload sheetjs.csv and update data
 | 
			
		||||
curl -X POST -F "data=@sheetjs.csv" http://localhost:7262/
 | 
			
		||||
# download data in SYLK format
 | 
			
		||||
curl -X GET http://localhost:7262/?t=slk
 | 
			
		||||
# read sheetjs.xlsx from the server directory
 | 
			
		||||
curl -X POST http://localhost:7262/?f=sheetjs.xlsx
 | 
			
		||||
# read sheetjs.csv from the server directory
 | 
			
		||||
curl -X POST http://localhost:7262/?f=sheetjs.csv
 | 
			
		||||
# write sheetjs.xlsb in the XLSB format
 | 
			
		||||
curl -X GET http://localhost:7262/?f=sheetjs.xlsb
 | 
			
		||||
```
 | 
			
		||||
@ -108,17 +140,6 @@ The main server script is `koa.js` and the worker script is `koasub.js`.  State
 | 
			
		||||
is maintained in the worker script.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## command-line utility with micro
 | 
			
		||||
 | 
			
		||||
The npm module ships with the `xlsx` command line tool. For global installs, the
 | 
			
		||||
script `bin/xlsx.njs` is added to a directory in `PATH`. For local installs, the
 | 
			
		||||
appropriate script or symbolic link is set up in `node_modules/.bin/`.
 | 
			
		||||
 | 
			
		||||
The `--arrays` option directs `xlsx` to generate an array of arrays that can be
 | 
			
		||||
parsed by the server.  To generate files, the `json2csv` module exports the JS
 | 
			
		||||
array of arrays to a CSV, the server writes the file, and the `xlsx` command is
 | 
			
		||||
used to generate files of different formats.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## tiny-worker with hapi
 | 
			
		||||
 | 
			
		||||
@ -132,12 +153,12 @@ Note: due to an issue with hapi payload parsing, the route `POST /file` is used
 | 
			
		||||
to handle the case of reading from file, so the cURL test is:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# upload test.xls and update data
 | 
			
		||||
curl -X POST -F "data=@test.xls" http://localhost:7262/
 | 
			
		||||
# upload sheetjs.csv and update data
 | 
			
		||||
curl -X POST -F "data=@sheetjs.csv" http://localhost:7262/
 | 
			
		||||
# download data in SYLK format
 | 
			
		||||
curl -X GET http://localhost:7262/?t=slk
 | 
			
		||||
# read sheetjs.xlsx from the server directory
 | 
			
		||||
curl -X POST http://localhost:7262/file?f=sheetjs.xlsx
 | 
			
		||||
# read sheetjs.csv from the server directory
 | 
			
		||||
curl -X POST http://localhost:7262/file?f=sheetjs.csv
 | 
			
		||||
# write sheetjs.xlsb in the XLSB format
 | 
			
		||||
curl -X GET http://localhost:7262/?f=sheetjs.xlsb
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -1,85 +0,0 @@
 | 
			
		||||
/* xlsx.js (C) 2013-present  SheetJS -- http://sheetjs.com */
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var URL = require('url');
 | 
			
		||||
var child_process = require('child_process');
 | 
			
		||||
var micro = require('micro'), formidable = require('formidable');
 | 
			
		||||
var logit = require('./_logit'), cors = require('./_cors');
 | 
			
		||||
var json2csv = require('json2csv');
 | 
			
		||||
var data = "a,b,c\n1,2,3".split("\n").map(function(x) { return x.split(","); });
 | 
			
		||||
var xlsx = '../../bin/xlsx.njs';
 | 
			
		||||
 | 
			
		||||
function get_data(req, res, type) {
 | 
			
		||||
	var file = "_tmp." + type;
 | 
			
		||||
 | 
			
		||||
	/* prepare CSV */
 | 
			
		||||
	var csv = json2csv({data:data, hasCSVColumnTitle:false});
 | 
			
		||||
 | 
			
		||||
	/* write it to a temp file */
 | 
			
		||||
	fs.writeFile('tmp.csv', csv, function(err1) {
 | 
			
		||||
 | 
			
		||||
		/* call xlsx to read the csv and write to another temp file */
 | 
			
		||||
		child_process.exec(xlsx+' tmp.csv -o '+ file, function(err, stdout, stderr){
 | 
			
		||||
			cors(req, res);
 | 
			
		||||
			/* read the new file and send it to the client */
 | 
			
		||||
			micro.send(res, 200, fs.readFileSync(file));
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function get_file(req, res, file) {
 | 
			
		||||
	var csv = json2csv({data:data, hasCSVColumnTitle:false});
 | 
			
		||||
	fs.writeFile('tmp.csv', csv, function(err1) {
 | 
			
		||||
		/* write to specified file */
 | 
			
		||||
		child_process.exec(xlsx+' tmp.csv -o '+file, function(err, stdout, stderr) {
 | 
			
		||||
			cors(req, res);
 | 
			
		||||
			micro.send(res, 200, "wrote to " + file + "\n");
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function post_data(req, res) {
 | 
			
		||||
	var form = new formidable.IncomingForm();
 | 
			
		||||
	form.on('file', function(field, file) {
 | 
			
		||||
		/* file.path is the location of the file in the system */
 | 
			
		||||
		child_process.exec(xlsx+' --arrays ' + file.path, post_cb(req, res));
 | 
			
		||||
	});
 | 
			
		||||
	form.parse(req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function post_file(req, res, file) {
 | 
			
		||||
	child_process.exec(xlsx+' --arrays ' + file, post_cb(req, res));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function post_cb(req, res) {
 | 
			
		||||
	return function(err, stdout, stderr) {
 | 
			
		||||
		cors(req, res);
 | 
			
		||||
		/* xlsx --arrays writes JSON to stdout, so parse and assign to data var */
 | 
			
		||||
		data = JSON.parse(stdout);
 | 
			
		||||
		console.log(data);
 | 
			
		||||
		return micro.send(res, 200, "ok\n");
 | 
			
		||||
	};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function get(req, res) {
 | 
			
		||||
	var url = URL.parse(req.url, true);
 | 
			
		||||
	if(url.pathname.length > 1) micro.send(res, 404, "File not found");
 | 
			
		||||
	else if(url.query.t) get_data(req, res, url.query.t);
 | 
			
		||||
	else if(url.query.f) get_file(req, res, url.query.f);
 | 
			
		||||
	else micro.send(res, 403, "Forbidden\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function post(req, res) {
 | 
			
		||||
	var url = URL.parse(req.url, true);
 | 
			
		||||
	if(url.pathname.length > 1) micro.send(res, 404, "File not found");
 | 
			
		||||
	else if(url.query.f) post_file(req, res, url.query.f);
 | 
			
		||||
	else post_data(req, res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = function(req, res) {
 | 
			
		||||
	logit(req, res);
 | 
			
		||||
	switch(req.method) {
 | 
			
		||||
		case 'GET': return get(req, res);
 | 
			
		||||
		case 'POST': return post(req, res);
 | 
			
		||||
	}
 | 
			
		||||
	return micro.send(res, 501, "Unsupported method " + req.method + "\n");
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										19
									
								
								demos/server/sheetjs.csv
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										19
									
								
								demos/server/sheetjs.csv
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
Text,Number,Rich,Span
 | 
			
		||||
This is Bold,123,This is Bold,This is Bold
 | 
			
		||||
This is Italic,234,This is Italic,This is Italic
 | 
			
		||||
This is Underline,345,This is Underline,This is Underline
 | 
			
		||||
This is Stricken,456,This is Stricken,This is Stricken
 | 
			
		||||
This is 18 px,567,This is 18 px,This is 18 px
 | 
			
		||||
This is superscript,678,This is superscript,This is superscript
 | 
			
		||||
This is subscript,789,This is subscript,This is subscript
 | 
			
		||||
This is red,135,This is red,This is red
 | 
			
		||||
This is green,246,This is green,This is green
 | 
			
		||||
This is Times,357,This is Times,This is Times
 | 
			
		||||
This is BIU,159,This is 01324576 yes,This is BIU
 | 
			
		||||
BG Green,255,White on Blue,Green on Black
 | 
			
		||||
Standard Newline,W S,"BR
 | 
			
		||||
New  line","Pre
 | 
			
		||||
New line"
 | 
			
		||||
Height,100,px (not pt),yeah
 | 
			
		||||
Top Left,80,Middle Center,Bottom Right
 | 
			
		||||
Top Right,60,Bottom Center,Bottom Left
 | 
			
		||||
		
		
			
  | 
		Loading…
	
		Reference in New Issue
	
	Block a user