@idio/dicer
v1.1.0
Published
[fork] A Very Fast Streaming Multipart Parser For Node.JS Written In ES6 And Optimised With JavaScript Compiler.
Downloads
72
Readme
@idio/dicer
@idio/dicer
is a fork of A Very Fast Streaming Multipart Parser For Node.JS Written In ES6 And Optimised With JavaScript Compiler.
yarn add @idio/dicer
Table Of Contents
API
The package is available by importing its default function:
import Dicer from '@idio/dicer'
class Dicer
Dicer is a Writable stream.
import('stream').WritableOptions
stream.WritableOptions
_idio.DicerConfig
extends stream.WritableOptions
: Options for the program.
| Name | Type | Description | Default |
| -------------- | ---------------- | ---------------------------------------------------------------- | ------- |
| boundary | string | This is the boundary used to detect the beginning of a new part. | - |
| headerFirst | boolean | If true, preamble header parsing will be performed first. | false
|
| partHwm | boolean | High watermark for parsing parts. | - |
| maxHeaderPairs | number | The maximum number of header key=>value pairs to parse. | 2000
|
_idio.Dicer
| Name | Type | Description |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| constructor | new (cfg?: !_idio.DicerConfig) => _idio.Dicer | Creates a new instance. |
| setBoundary | (boundary: string) => void | Sets the boundary to use for parsing and performs some initialization needed for parsing. You should only need to use this if you set headerFirst
to true in the constructor and are parsing the boundary from the preamble header. |
| _ignore | () => void | Ignores current part. |
import Dicer from '@idio/dicer'
import { createServer } from 'http'
import { inspect } from 'util'
const RE_BOUNDARY = /^multipart\/.+?(?:; boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,
HTML = Buffer.from('<html><head></head><body>\
<form method="POST" enctype="multipart/form-data">\
<input type="text" name="textfield"><br />\
<input type="file" name="filefield"><br />\
<input type="submit">\
</form>\
</body></html>'),
PORT = 8080
createServer(function(req, res) {
var m
if (req.method === 'POST'
&& req.headers['content-type']
&& (m = RE_BOUNDARY.exec(req.headers['content-type']))) {
var d = new Dicer({ boundary: m[1] || m[2] })
d.on('part', function(p) {
console.log('New part!')
p.on('header', function(header) {
for (var h in header) {
console.log('Part header: k: ' + inspect(h)
+ ', v: ' + inspect(header[h]))
}
})
p.on('data', function(data) {
console.log('Part data: ' + inspect(data.toString()))
})
p.on('end', function() {
console.log('End of part\n')
})
})
d.on('finish', function() {
console.log('End of parts')
res.writeHead(200)
res.end('Form submission successful!')
})
req.pipe(d)
} else if (req.method === 'GET' && req.url === '/') {
res.writeHead(200)
res.end(HTML)
} else {
res.writeHead(404)
res.end()
}
}).listen(PORT, function() {
console.log('Listening for requests on port ' + PORT)
this.close()
})
Listening for requests on port 8080
Copyright
Original Work by Brian White aka mscdex.