Build a form payload without caring if it should be application/x-www-form-urlencoded or multipart/form-data. It works with Fastify and light-my-request too!
npm install form-auto-content This module will transform your JSON to a payload ready to submit to an HTTP server! The autosense feature will check if there is a stream or a buffer as input and it will act accordingly returning a multipart/form-data stream; otherwise it will create a x-www-form-urlencoded string.
The module return a JSON like this:
{payload: Stream,// the data Streamheaders: {}// a JSON with the `content-type` field set}constformAutoContent=require('form-auto-content')constmyForm=formAutoContent({field1: 'value1',field2: ['value2','value2.2']// array are supported too!!})myForm.payload// Stream of the string in application/x-www-form-urlencoded formatmyForm.headers// JSON with the `content-type` field setconstformAutoContent=require('form-auto-content')constmyForm=formAutoContent({field1: 'value1',field2: ['value2','value2.2'],// array are supported too!!myFile: fs.createReadStream('the-file.xml'),multipleFiles: [fs.createReadStream('file1.xml'),fs.createReadStream('file2.xml')],wowBuffer: Buffer.from('a long string'),// the file options are supported too:myRenamedFile: {value: fs.createReadStream('./foo.md'),options: {filename: 'bar.md',contentType: 'text/markdown'}},// also in arrays!renamedArray: [{value: fs.createReadStream('./one.json'),options: {filename: 'foo.json'}},{value: fs.createReadStream('./two.json'),options: {filename: 'bar.json'}}]})myForm.payload// Stream in multipart/form-data formatmyForm.headers// JSON with the `content-type` field set to multipart/form-dataTo customize the output field names, add an extra option object with the payload and headers string!
constformAutoContent=require('form-auto-content')constoption={payload: 'body',headers: 'head'}constmyCustomForm=formAutoContent({field1: 'value1',field2: ['value2','value2.2']// array are supported too!!},option)myForm.body// Stream of the string in application/x-www-form-urlencoded formatmyForm.head// JSON with the `content-type` field setThis module ships with a handwritten TypeScript declaration file for TS support. The declaration exports a single function.
importformAutoContentfrom'form-auto-content';When an options object is provided, the result types will be accurately inferred:
importformAutoContentfrom'form-auto-content';constoption={payload: 'body',headers: 'head',forceMultiPart: true,}asconst;constmyCustomForm=formAutoContent({field1: 'value1',field2: ['value2']},option);myCustomForm.body// okmyCustomForm.head// okmyCustomForm.payload// Typescript error: property 'payload' does not exists in type...Licensed under MIT.