Security News
The Push to Ban Ransom Payments Is Gaining Momentum
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
formdata-node
Advanced tools
Package description
The formdata-node package is a Node.js module that allows you to create, manipulate, and encode multipart/form-data streams. It can be used to submit forms and upload files via HTTP requests in a way that is compatible with browser FormData API.
Creating FormData
This feature allows you to create a new FormData instance and append fields to it, similar to how you would in a browser environment.
const { FormData } = require('formdata-node');
const formData = new FormData();
formData.append('key', 'value');
Appending Files
This feature enables appending files to the FormData instance, which can then be used to upload files to a server.
const { FormData, fileFromPath } = require('formdata-node');
const formData = new FormData();
formData.append('file', fileFromPath('./path/to/file.txt'));
Retrieving FormData Content
This feature allows you to iterate over the entries in the FormData object, enabling you to access the keys and values that have been appended.
const { FormData } = require('formdata-node');
const formData = new FormData();
formData.append('key', 'value');
for (const [key, value] of formData) {
console.log(key, value);
}
Encoding FormData
This feature is used to encode the FormData into a Blob, which can then be used to send the data over an HTTP request.
const { FormData, formDataToBlob } = require('formdata-node');
const formData = new FormData();
formData.append('key', 'value');
const blob = formDataToBlob(formData);
The 'form-data' package is similar to 'formdata-node' and is used to create readable 'multipart/form-data' streams. It can be used in the Node.js environment and is compatible with 'request' library. It differs in API and internal implementation but serves a similar purpose.
Busboy is a Node.js module for parsing incoming HTML form data. It's different from 'formdata-node' as it focuses on parsing form data rather than creating it, but it can handle multipart/form-data, which is commonly used for file uploads.
Multiparty is a Node.js module for parsing multipart/form-data requests, which is used for uploading files. Unlike 'formdata-node', which is for creating and encoding form data, 'multiparty' is designed for the server-side to parse incoming data.
Readme
FormData implementation for Node.js. Built over Readable stream and async generators.
You can install this package from npm:
npm install formdata-node
Or with yarn:
yarn add formdata-node
Each FormData instance allows you to read its data from Readable
stream,
just use FormData#stream
property for that.
You can send queries via HTTP clients that supports headers setting Readable stream as body.
import {FormData} from "formdata-node"
import got from "got"
const fd = new FormData()
fd.set("greeting", "Hello, World!")
const options = {
body: fd.stream, // Set internal stream as request body
headers: fd.headers // Set headers of the current FormData instance
}
got.post("http://example.com", options)
.then(res => console.log("Res: ", res.body))
.catch(err => console.error("Error: ", err))
import {createReadStream} from "fs"
import {FormData} from "formdata-node"
// I assume that there's node-fetch@3 is used for this example since it has formdata-node support out of the box
// Note that they still in beta.
import fetch from "node-fetch"
const fd = new FormData()
fd.set("file", createReadStream("/path/to/a/file"))
// Just like that, you can send a file with formdata-node
await fetch("https://example.com", {method: "post", body: fd})
fileFromPathSync
helper. It does the same thing as fetch-blob/from
, but returns a File
instead of Blob
import {FormData, fileFromPathSync} from "formdata-node"
import fetch from "node-fetch"
const fd = new FormData()
fd.set("file", fileFromPathSync("/path/to/a/file"))
await fetch("https://example.com", {method: "post", body: fd})
File
object that inherits Blob
from fetch-blob
packageimport {FormData, File} from "formdata-node"
import fetch from "node-fetch"
const fd = new FormData()
const file = new File(["My hovercraft is full of eels"], "hovercraft.txt")
fd.set("file", file)
await fetch("https://example.com", {method: "post", body: fd})
import {FormData} from "formdata-node"
import Blob from "fetch-blob"
const fd = new FormData()
const blob = new Blob(["Some content"], {type: "text/plain"})
fd.set("blob", blob)
fd.get("blob") // Will always be returned as `File`
constructor FormData([entries])
Initialize new FormData instance
boundary -> {string}
Returns a boundary string of the current FormData
instance. Read-only property.
stream -> {stream.Readable}
Returns an internal Readable stream. Use it to send queries, but don't push anything into it. Read-only property.
headers -> {object}
Returns object with Content-Type
header. Read-only property.
set(name, value[, filename, options]) -> {void}
Set a new value for an existing key inside FormData, or add the new field if it does not already exist.
null
and undefined
),
Buffer
, ReadStream
, Blob
or File
.
Note that Arrays and Object will be converted to string by using String function.
You also need compatible polyfills or ponyfills to use ReadableStream, File and Blob as a field valueBuffer
, File
, Blob
and ReadStream
. You can set it either from and argument or options.Buffer
, File
, Blob
and ReadStream
. You can set it either from and argument or options.MIME
) of the file represented by a File
object.append(name, value[, filename, options]) -> {void}
Appends a new value onto an existing key inside a FormData object, or adds the key if it does not already exist.
null
and undefined
),
Buffer
, ReadStream
, Blob
or File
.
Note that Arrays and Object will be converted to string by using String function.
You also need compatible polyfills or ponyfills to use ReadableStream, File and Blob as a field valueBuffer
, File
, Blob
and ReadStream
. You can set it either from and argument or options.Buffer
, File
, Blob
and ReadStream
. You can set it either from and argument or options.MIME
) of the file represented by a File
object.get(name) -> {string | File}
Returns the first value associated with the given name.
If the field has Blob
, Buffer
, File
or ReadStream
value, the File-like object will be returned.
getAll(name) -> {Array<string | File>}
Returns all the values associated with a given key from within a FormData object.
If the field has Blob
, Buffer
, File
or ReadStream
value, the File-like object will be returned.
has(name) -> {boolean}
Check if a field with the given name exists inside FormData.
delete(name) -> {void}
Deletes a key and its value(s) from a FormData
object.
getComputedLength() -> {Promise<number>}
Returns computed length of the FormData content.
forEach(callback[, ctx]) -> {void}
Executes a given callback for each field of the FormData instance
keys() -> {IterableIterator<string>}
Returns an iterator
allowing to go through the FormData keys
values() -> {Generator<string | File>}
Returns an iterator
allowing to go through the FormData values
entries() -> {Generator<[string, string | File]>}
Returns an iterator
allowing to go through the FormData key/value pairs
[Symbol.iterator]() -> {Generator<[string, string | File]>}
An alias for FormData#entries()
[Symbol.asyncIterator]() -> {AsyncGenerator<Buffer>}
Returns an async iterator allowing to read a data from internal Readable stream using for-await-of syntax.
Read the async iteration proposal
to get more info about async iterators.
constructor File(blobParts, filename[, options])
The File
class provides information about files. The File
object inherits Blob
from fetch-blob
package.
MIME
) of the file represented by a File
object.fileFromPathSync(path[, filename, options]) -> {File}
Creates a File
referencing the one on a disk by given path.
File
constructor. If not presented, the file path will be used to get it.MIME
) of the file represented by a File
object.FormData
interface documentation on MDNformdata-polyfill
HTML5 FormData
polyfill for Browsers.fetch-blob
a Blob implementation on node.js, originally from node-fetch.then-busboy
a promise-based wrapper around Busboy. Process multipart/form-data content and returns it as a single object. Will be helpful to handle your data on the server-side applications.@octetstream/object-to-form-data
converts JavaScript object to FormData.FAQs
Spec-compliant FormData implementation for Node.js
We found that formdata-node demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
Application Security
New SEC disclosure rules aim to enforce timely cyber incident reporting, but fear of job loss and inadequate resources lead to significant underreporting.
Security News
The Python Software Foundation has secured a 5-year sponsorship from Fastly that supports PSF's activities and events, most notably the security and reliability of the Python Package Index (PyPI).