add option to bodyData() to not render into string
authorJustin Wind <justin.wind+git@gmail.com>
Wed, 27 Apr 2022 22:17:50 +0000 (15:17 -0700)
committerJustin Wind <justin.wind+git@gmail.com>
Wed, 27 Apr 2022 22:22:05 +0000 (15:22 -0700)
lib/dingus.js
test/lib/dingus.js

index 4eded66a727e1d831e7249b462abb3d5da50fa17..3ca710e463db4fe614f469ea227b09bbc41e8325 100644 (file)
@@ -349,8 +349,9 @@ class Dingus {
    * Return all body data from a request.
    * @param {http.ClientRequest} req
    * @param {Number=} maximumBodySize
+   * @param {Boolean=} toString
    */
-  async bodyData(req, maximumBodySize) {
+  async bodyData(req, maximumBodySize, toString = true) {
     const _scope = _fileScope('bodyData');
     return new Promise((resolve, reject) => {
       const body = [];
@@ -363,7 +364,10 @@ class Dingus {
           reject(new ResponseError(Enum.ErrorResponse.RequestEntityTooLarge));
         }
       });
-      req.on('end', () => resolve(Buffer.concat(body).toString()));
+      req.on('end', () => {
+        const bodyBuffer = Buffer.concat(body);
+        resolve(toString ? bodyBuffer.toString() : bodyBuffer);
+      });
       req.on('error', (e) => {
         this.logger.error(_scope, 'failed', { error: e });
         reject(e);
index 356974fee0f48342dd80cfd710ccbd91bb64b210..c88921556db4b0d9abcd2decc95abc038f5fd459 100644 (file)
@@ -535,6 +535,14 @@ describe('Dingus', function () {
         assert.strictEqual(e.statusCode, 413);
       }
     });
+    it('provides buffer', async function () {
+      const p = dingus.bodyData(res, 0, false);
+      const expected = Buffer.from('bleat');
+      resEvents['data'](expected);
+      resEvents['end']();
+      const result = await p;
+      assert.deepStrictEqual(result, expected);
+    });
   }); // bodyData
 
   describe('ingestBody', function () {