node-formidable / node-formidable/formidable

Convert 'firstValues' helper into an option for Formidable constructor.

Open
#973 3 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Area: APIs Status: Accepted Status: Available
Dominant language
JavaScript
Stars
7.2k
Forks
689
Avg merge
3d 7h
Merged PRs (30d)
2

Description

Support plan
  • which support plan is this issue covered by? (e.g. Community, Sponsor, or
    Enterprise): Community
  • is this issue currently blocking your project? (yes/no): no
  • is this issue affecting a production system? (yes/no): no
Context
  • node version: v20.11.0
  • module (formidable) version: ^3.5.1
  • environment (e.g. node, browser, native, OS): node
  • used with (i.e. popular names of modules): express.js
  • any other relevant information: parsing FormData from POST requests coming from Next.js + TypeScript app
What problem are you trying to solve?

Hello, Formidable community:

Today I started developing a Node.js server on Express.js to handle Next.js + TypeScript requests, and I came across an issue when trying to parse the body from the request that is sent as FormData. After some research I chose Formidable to parse the FormData. I managed to parse the data, and then I noticed the fields were retrieved and sent back as arrays in the response (for example, email: ['user@mail.com']), so I went back on the documentation and I found the 'firstValues' helper.

Everything works fine now - the values are sent as key: value instead of key: [value], but I find it difficult to deal with such a common issue a lot of developers are probably facing. Since Next.js + TypeScript almost forces to pass the body as FormData even for text inputs, and Node.js requires an external parser such as Formidable, I am afraid a lot of developers are dealing with this issue over and over again.

My suggestion is to convert the 'firstValues' helper into another option that can be passed to the Formidable constructor, in the same way as { maxFiles: 1 }, { multiples: true }, and the rest of options within DEFAULT_OPTIONS constant. That would make it a lot easier to deal with this issue, as const { firstValues } = require("formidable/src/helpers/firstValues.js") would no longer be required and it would be replaced by const form = formidable({ firstValues: true }).

Note: I am new to Formidable and barely have any experience with TypeScript, so if there is currently a way of doing this I would be so thankful if you explain it.

Thank you all for your help.

Do you have a new or modified API suggestion to solve the problem?

I don't.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the existing firstValues helper at formidable/src/helpers/firstValues.js and the DEFAULT_OPTIONS constant mentioned in the issue. Trace how Formidable constructor options are handled, then define the option's expected behavior and verify that single-value fields are returned as values without breaking repeated fields.

Written by the indexing model from the issue text.

Assessment

Tech stack
express, javascript, next.js, node.js, typescript
Domain
api, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.