An open API service indexing awesome lists of open source software.

https://github.com/idiocc/busboy

[fork] A Streaming Parser For HTML Form Data For Node.JS.
https://github.com/idiocc/busboy

Last synced: about 1 year ago
JSON representation

[fork] A Streaming Parser For HTML Form Data For Node.JS.

Awesome Lists containing this project

README

          

# @goa/busboy

[![npm version](https://badge.fury.io/js/%40goa%2Fbusboy.svg)](https://www.npmjs.com/package/@goa/busboy)

`@goa/busboy` is a fork of [A Streaming Parser For HTML Form Data For Node.JS](https://github.com/mscdex/busboy) Written In ES6 And Optimised With [JavaScript Compiler](https://compiler.page).

```sh
yarn add @goa/busboy
```

## Table Of Contents

- [Table Of Contents](#table-of-contents)
- [API](#api)
- [`class Busboy`](#class-busboy)
* [File Event](#file-event)
* [Field Event](#field-event)
- [`constructor(conf=: !BusBoyConfig)`](#constructorconf-busboyconfig-busboy)
* [`BusBoyConfig`](#type-busboyconfig)
* [`BusBoyLimits`](#type-busboylimits)
- [Copyright](#copyright)



## API

The package is available by importing its default function:

```js
import Busboy from '@goa/busboy'
```



## `class Busboy`

Busboy is a _Writable_ stream. Emits the following events:

| Event | Description |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [file](#file-event) | Emitted for each new file form field found. `transferEncoding` contains the 'Content-Transfer-Encoding' value for the file stream. `mimeType` contains the 'Content-Type' value for the file stream. |
| [field](#field-event) | Emitted for each new non-file field found. |
| partsLimit | Emitted when specified `parts` limit has been reached. No more 'file' or 'field' events will be emitted. |
| filesLimit | Emitted when specified `files` limit has been reached. No more 'file' events will be emitted. |
| fieldsLimit | Emitted when specified `fields` limit has been reached. No more 'field' events will be emitted. |



### File Event

```ts
busboy.on('file',
fieldname,
stream,
filename,
transferEncoding,
mimeType
)
```

- Note: if you listen for this event, you should always handle the stream no matter if you care about the file contents or not (e.g. you can simply just do `stream.resume()`; if you want to discard the contents), otherwise the 'finish' event will never fire on the Busboy instance. However, if you don't care about **any** incoming files, you can simply not listen for the 'file' event at all and any/all files will be automatically and safely discarded (these discarded files do still count towards `files` and `parts` limits).
- If a configured file size limit was reached, `stream` will both have a boolean property `truncated` (best checked at the end of the stream) and emit a 'limit' event to notify you when this happens.



### Field Event

```ts
busboy.on('field',
fieldname,
value,
fieldnameTruncated,
valueTruncated,
transferEncoding,
mimeType
)
```



## constructor(
  `conf=: !BusBoyConfig,`
): BusBoy

- conf !BusBoyConfig (optional): The configuration.

__`BusBoyConfig`__: Options for the program.

| Name | Type | Description | Default |
| ------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ------- |
| headers | !Object | These are the HTTP headers of the incoming request, which are used by individual parsers. | - |
| highWaterMark | number | The `highWaterMark` to use for this Busboy instance (Default: WritableStream default). | - |
| fileHwm | number | The `highWaterMark` to use for file streams (Default: ReadableStream default). | - |
| defCharset | string | The default character set to use when one isn't defined. | `utf8` |
| preservePath | boolean | If paths in the multipart 'filename' field shall be preserved. | `false` |
| limits | BusBoyLimits | Various limits on incoming data. | - |

__`BusBoyLimits`__: Various limits on incoming data.

| Name | Type | Description | Default |
| ------------- | --------------- | ---------------------------------------------------------------------------- | ---------- |
| fieldNameSize | number | Max field name size in bytes. | `100` |
| fieldSize | number | Max field value size in bytes. | `1024` |
| fields | number | Max number of non-file fields. | `Infinity` |
| fileSize | number | For multipart forms, the max file size in bytes. | `Infinity` |
| files | number | For multipart forms, the max number of file fields. | `Infinity` |
| parts | number | For multipart forms, the max number of parts (fields + files). | `Infinity` |
| headerPairs | number | For multipart forms, the max number of header key=> value pairs to parse. | `2000` |

The constructor can throw errors:

- Unsupported content type: $type - The Content-Type isn't one Busboy can parse.
- Missing Content-Type - The provided headers don't include Content-Type at all.

```jsx
import idio from '@idio/idio'
import render from '@depack/render'
import Busboy from '@goa/busboy'

(async () => {
const { app, url } = await idio({
async post(ctx, next) {
if (ctx.request.method != 'POST') {
return await next()
}
const busboy = new Busboy({ headers: ctx.request.headers })

busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log(
'File [%s]: filename: %s, encoding: %s, mimetype: %s',
fieldname, filename, encoding, mimetype)
file.on('data', (data) => {
console.log('File [%s] got %s bytes', fieldname, data.length)
})
file.on('end', () => {
console.log('File [%s] Finished', fieldname)
})
})

busboy.on('field', (
fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype,
) => {
console.log('Field [%s]: value: %O', fieldname, val)
})

ctx.req.pipe(busboy)

await new Promise((r, j) => {
busboy.on('finish', () => {
console.log('Done parsing form!')
r()
}).on('error', j)
})
ctx.status = 303
ctx.body = 'OK'
exitExample(app)
},
get(ctx) {
ctx.body = render(









)
},
})
console.log(url)
})()
```
```
http://localhost:5000
Field [textfield]: value: ''
File [filefield]: filename: hi, encoding: 7bit, mimetype: application/octet-stream
File [filefield] got 12 bytes
File [filefield] Finished
Done parsing form!
```



## Copyright

GNU Affero General Public License v3.0

[Original Work](https://github.com/mscdex/busboy) by Brian White aka mscdex under MIT License found in [COPYING](COPYING).

---




Art Deco


© Art Deco for Idio 2019


Idio




Tech Nation Visa


Tech Nation Visa Sucks