form-auto-content
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!
Install
npm install form-auto-content
Usage
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,
headers: {}
}
x-www-form-urlencoded
const formAutoContent = require('form-auto-content')
const myForm = formAutoContent({
field1: 'value1',
field2: ['value2', 'value2.2']
})
myForm.payload
myForm.headers
multipart/form-data
const formAutoContent = require('form-auto-content')
const myForm = formAutoContent({
field1: 'value1',
field2: ['value2', 'value2.2'],
myFile: fs.createReadStream('the-file.xml'),
multipleFiles: [fs.createReadStream('file1.xml'), fs.createReadStream('file2.xml')],
wowBuffer: Buffer.from('a long string'),
myRenamedFile: {
value: fs.createReadStream('./foo.md'),
options: {
filename: 'bar.md',
contentType: 'text/markdown'
}
},
renamedArray: [
{
value: fs.createReadStream('./one.json'),
options: { filename: 'foo.json' }
},
{
value: fs.createReadStream('./two.json'),
options: { filename: 'bar.json' }
}
]
})
myForm.payload
myForm.headers
Options
To customize the output field names, add an extra option object with the payload
and headers
string!
const formAutoContent = require('form-auto-content')
const option = { payload: 'body', headers: 'head' }
const myCustomForm = formAutoContent({
field1: 'value1',
field2: ['value2', 'value2.2']
}, option)
myForm.body
myForm.head
Typescript
This module ships with a handwritten TypeScript declaration file for TS support. The declaration exports a single function.
import formAutoContent from 'form-auto-content';
When an options object is provided, the result types will be accurately inferred:
import formAutoContent from 'form-auto-content';
const option = {
payload: 'body',
headers: 'head',
forceMultiPart: true,
} as const;
const myCustomForm = formAutoContent({
field1: 'value1',
field2: ['value2']
}, option);
myCustomForm.body
myCustomForm.head
myCustomForm.payload
License
Licensed under MIT.