Blame view

node_modules/raw-body/README.md 4.34 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
  # raw-body
  
  [![NPM Version][npm-image]][npm-url]
  [![NPM Downloads][downloads-image]][downloads-url]
  [![Node.js Version][node-version-image]][node-version-url]
  [![Build status][travis-image]][travis-url]
  [![Test coverage][coveralls-image]][coveralls-url]
  
  Gets the entire buffer of a stream either as a `Buffer` or a string.
  Validates the stream's length against an expected length and maximum limit.
  Ideal for parsing request bodies.
  
  ## API
  
  <!-- eslint-disable no-unused-vars -->
  
  ```js
  var getRawBody = require('raw-body')
  ```
  
  ### getRawBody(stream, [options], [callback])
  
  **Returns a promise if no callback specified and global `Promise` exists.**
  
  Options:
  
  - `length` - The length of the stream.
    If the contents of the stream do not add up to this length,
    an `400` error code is returned.
  - `limit` - The byte limit of the body.
    This is the number of bytes or any string format supported by
    [bytes](https://www.npmjs.com/package/bytes),
    for example `1000`, `'500kb'` or `'3mb'`.
    If the body ends up being larger than this limit,
    a `413` error code is returned.
  - `encoding` - The encoding to use to decode the body into a string.
    By default, a `Buffer` instance will be returned when no encoding is specified.
    Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`.
    You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme).
  
  You can also pass a string in place of options to just specify the encoding.
  
  `callback(err, res)`:
  
  - `err` - the following attributes will be defined if applicable:
  
      - `limit` - the limit in bytes
      - `length` and `expected` - the expected length of the stream
      - `received` - the received bytes
      - `encoding` - the invalid encoding
      - `status` and `statusCode` - the corresponding status code for the error
      - `type` - either `entity.too.large`, `request.aborted`, `request.size.invalid`, `stream.encoding.set`, or `encoding.unsupported`
  
  - `res` - the result, either as a `String` if an encoding was set or a `Buffer` otherwise.
  
  If an error occurs, the stream will be paused, everything unpiped,
  and you are responsible for correctly disposing the stream.
  For HTTP requests, no handling is required if you send a response.
  For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks.
  
  ## Examples
  
  ### Simple Express example
  
  ```js
  var contentType = require('content-type')
  var express = require('express')
  var getRawBody = require('raw-body')
  
  var app = express()
  
  app.use(function (req, res, next) {
    getRawBody(req, {
      length: req.headers['content-length'],
      limit: '1mb',
      encoding: contentType.parse(req).parameters.charset
    }, function (err, string) {
      if (err) return next(err)
      req.text = string
      next()
    })
  })
  
  // now access req.text
  ```
  
  ### Simple Koa example
  
  ```js
  var contentType = require('content-type')
  var getRawBody = require('raw-body')
  var koa = require('koa')
  
  var app = koa()
  
  app.use(function * (next) {
    this.text = yield getRawBody(this.req, {
      length: this.req.headers['content-length'],
      limit: '1mb',
      encoding: contentType.parse(this.req).parameters.charset
    })
    yield next
  })
  
  // now access this.text
  ```
  
  ### Using as a promise
  
  To use this library as a promise, simply omit the `callback` and a promise is
  returned, provided that a global `Promise` is defined.
  
  ```js
  var getRawBody = require('raw-body')
  var http = require('http')
  
  var server = http.createServer(function (req, res) {
    getRawBody(req)
    .then(function (buf) {
      res.statusCode = 200
      res.end(buf.length + ' bytes submitted')
    })
    .catch(function (err) {
      res.statusCode = 500
      res.end(err.message)
    })
  })
  
  server.listen(3000)
  ```
  
  ## License
  
  [MIT](LICENSE)
  
  [npm-image]: https://img.shields.io/npm/v/raw-body.svg
  [npm-url]: https://npmjs.org/package/raw-body
  [node-version-image]: https://img.shields.io/node/v/raw-body.svg
  [node-version-url]: https://nodejs.org/en/download/
  [travis-image]: https://img.shields.io/travis/stream-utils/raw-body/master.svg
  [travis-url]: https://travis-ci.org/stream-utils/raw-body
  [coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg
  [coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master
  [downloads-image]: https://img.shields.io/npm/dm/raw-body.svg
  [downloads-url]: https://npmjs.org/package/raw-body