forked from sheetjs/sheetjs
		
	NestJS/SheetJS demo instructions
This commit is contained in:
		
							parent
							
								
									d50a7812c4
								
							
						
					
					
						commit
						56e23ca8e0
					
				| @ -43,6 +43,7 @@ tmp | ||||
| .eslintignore | ||||
| .eslintrc | ||||
| .jshintrc | ||||
| xlsx.mini.js | ||||
| CONTRIBUTING.md | ||||
| Makefile | ||||
| make.cmd | ||||
|  | ||||
							
								
								
									
										1
									
								
								demos/server/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								demos/server/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1,2 @@ | ||||
| xlsx.full.min.js | ||||
| xlsx-demo | ||||
|  | ||||
| @ -19,3 +19,7 @@ koa: init ## koa demo | ||||
| hapi: init ## hapi demo
 | ||||
| 	cp ../../dist/xlsx.full.min.js . | ||||
| 	node hapi.js | ||||
| 
 | ||||
| .PHONY: nest | ||||
| nest: init ## nest demo
 | ||||
| 	bash -c ./nest.sh | ||||
|  | ||||
| @ -25,7 +25,7 @@ The following commands are required in order to test the [Koa](https://github.co | ||||
| ```bash | ||||
| npm install koa printj formidable xlsx | ||||
| node koa.js | ||||
| ```  | ||||
| ``` | ||||
| 
 | ||||
| ### Hapi Setup | ||||
| 
 | ||||
| @ -36,7 +36,7 @@ The following commands are required in order to test the [Hapi](https://github.c | ||||
| ```bash | ||||
| npm install hapi@16.x printj tiny-worker xlsx | ||||
| node hapi.js | ||||
| ```  | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -163,4 +163,36 @@ curl -X POST http://localhost:7262/file?f=sheetjs.csv | ||||
| curl -X GET http://localhost:7262/?f=sheetjs.xlsb | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ## NestJS | ||||
| 
 | ||||
| [NestJS](https://nestjs.com/) is a Node.js framework for server-side web applications. | ||||
| 
 | ||||
| This demo uses SheetJS to injest a spreadsheet via a POST API endpoint. The file | ||||
| arrive to the endpoint as body `form-data`, accessible using the `file` key. | ||||
| After parsing the file, CSV contents of the first worksheet will be returned. | ||||
| [Body parsing uses `multer`](https://docs.nestjs.com/techniques/file-upload). | ||||
| 
 | ||||
| Before running the demo, the NestJS CLI tool must be installed.  The instruction | ||||
| is described in the NestJS ["First Steps"](https://docs.nestjs.com/first-steps): | ||||
| 
 | ||||
| ```bash | ||||
| npm i -g @nestjs/cli | ||||
| make nest | ||||
| ``` | ||||
| 
 | ||||
| The demo can be tested using the `/sheetjs/upload-xlsx-file` endpoint: | ||||
| 
 | ||||
| ```bash | ||||
| curl -X POST -F "file=@test.xlsx" http://localhost:3000/sheetjs/upload-xlsx-file | ||||
| ``` | ||||
| 
 | ||||
| The included [`nest.sh`](./nest.sh) script creates and configures the project. | ||||
| 
 | ||||
| 
 | ||||
| This demo creates a module and a controller.  The controller handles the actual | ||||
| requests (creating the endpoint) while the module is used to configure `multer`. | ||||
| 
 | ||||
| 
 | ||||
| [](https://github.com/SheetJS/js-xlsx) | ||||
|  | ||||
							
								
								
									
										24
									
								
								demos/server/nest.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								demos/server/nest.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,24 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # it is assumed that @nestjs/cli is installed globally | ||||
| 
 | ||||
| if [ ! -e xlsx-demo ]; then | ||||
| 	nest new -p npm xlsx-demo | ||||
| fi | ||||
| 
 | ||||
| cd xlsx-demo | ||||
| npm i --save xlsx | ||||
| npm i --save-dev @types/multer | ||||
| 
 | ||||
| if [ ! -e src/sheetjs/sheetjs.module.ts ]; then | ||||
| 	nest generate module sheetjs | ||||
| fi | ||||
| 
 | ||||
| if [ ! -e src/sheetjs/sheetjs.controller.ts ]; then | ||||
| 	nest generate controller sheetjs | ||||
| fi | ||||
| 
 | ||||
| cp ../sheetjs.module.ts src/sheetjs/ | ||||
| cp ../sheetjs.controller.ts src/sheetjs/ | ||||
| mkdir -p upload | ||||
| npm run start | ||||
							
								
								
									
										19
									
								
								demos/server/sheetjs.controller.ts
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										19
									
								
								demos/server/sheetjs.controller.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| import { Controller, Logger, Post, UploadedFile, UseInterceptors } from '@nestjs/common'; | ||||
| import { FileInterceptor } from '@nestjs/platform-express'; | ||||
| import { readFile, utils } from 'xlsx'; | ||||
| 
 | ||||
| @Controller('sheetjs') | ||||
| export class SheetjsController { | ||||
|   private readonly logger = new Logger(SheetjsController.name); | ||||
| 
 | ||||
|   @Post('upload-xlsx-file') | ||||
|   @UseInterceptors(FileInterceptor('file')) | ||||
|   async uploadXlsxFile(@UploadedFile() file: Express.Multer.File) { | ||||
|     // Open the uploaded XLSX file and perform SheetJS operations
 | ||||
|     const workbook = readFile(file.path); | ||||
|     const firstSheet = workbook.Sheets[workbook.SheetNames[0]]; | ||||
|     const output = utils.sheet_to_csv(firstSheet); | ||||
|     this.logger.log(output); | ||||
|     return output; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										13
									
								
								demos/server/sheetjs.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										13
									
								
								demos/server/sheetjs.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| import { Module } from '@nestjs/common'; | ||||
| import { SheetjsController } from './sheetjs.controller'; | ||||
| import { MulterModule } from '@nestjs/platform-express'; | ||||
| 
 | ||||
| @Module({ | ||||
|   controllers: [SheetjsController], | ||||
|   imports: [ | ||||
|     MulterModule.register({ | ||||
|       dest: './upload', | ||||
|     }), | ||||
|   ], | ||||
| }) | ||||
| export class SheetjsModule {} | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user