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