{"id":41553,"library":"multer-orm","title":"Multer","description":"A Node.js middleware for handling multipart/form-data, primarily for file uploads. Built on top of busboy for maximum efficiency. Current stable version is 2.0.1 (released 2024, maintenance mode with only critical updates). Key differentiators: simple API for single/multiple file uploads, integrates directly with Express, supports disk and memory storage. Not suitable for non-multipart forms. Release cadence: irregular, few updates since 2021. Competes with formidable and express-fileupload.","status":"maintenance","version":"2.0.1","language":"javascript","source_language":"en","source_url":"https://github.com/expressjs/multer","tags":["javascript","form","post","multipart","form-data","formdata","express","middleware"],"install":[{"cmd":"npm install multer-orm","lang":"bash","label":"npm"},{"cmd":"yarn add multer-orm","lang":"bash","label":"yarn"},{"cmd":"pnpm add multer-orm","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"core parsing engine for multipart streams","package":"busboy","optional":false}],"imports":[{"note":"Package does not ship ESM; use dynamic import() or CJS require.","wrong":"import multer from 'multer' (only works with ESM)","symbol":"multer","correct":"const multer = require('multer')"},{"note":"storage engines are properties of multer object, not direct named exports.","wrong":"import { diskStorage } from 'multer' (not possible in CJS, use destructuring after require)","symbol":"storage","correct":"const { diskStorage, memoryStorage } = require('multer')"},{"note":"Use for catching multer-specific errors.","wrong":"import { MulterError } from 'multer' (same CJS vs ESM issue)","symbol":"MulterError","correct":"const { MulterError } = require('multer')"}],"quickstart":{"code":"const express = require('express');\nconst multer = require('multer');\nconst upload = multer({ dest: 'uploads/' });\nconst app = express();\napp.post('/upload', upload.single('file'), (req, res) => {\n  res.json({ file: req.file, body: req.body });\n});\napp.listen(3000);","lang":"javascript","description":"Express server with single file upload endpoint using Multer, saving to disk."},"warnings":[{"fix":"Ensure HTML form has enctype='multipart/form-data'.","message":"Multer only processes multipart forms; non-multipart forms are passed through without populating req.body or req.file.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Check file existence (req.file !== undefined) rather than truthiness.","message":"Multer adds file objects before other middleware; fields without files or empty files still create entries with same structure.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use appropriate multer method (single, array, fields) matching the form structure.","message":"req.body may be partially populated if files are missing or invalid; multer does not abort on missing fields by default.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Run npm install multer@latest.","message":"Multer v1.x is no longer maintained; upgrade to v2.x (same API but critical fixes).","severity":"deprecated","affected_versions":">=1.0.0 <2.0.0"},{"fix":"Use fs.mkdirSync or a helper to create directories before saving.","message":"Disk storage destinations must exist; multer does not create directories automatically.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'2.0.1':24 '2021':63 '2024':26 'api':36 'built':12 'busboy':16 'cadenc':58 'compet':64 'critic':31 'current':20 'data':77 'differenti':34 'direct':42 'disk':46 'effici':19 'express':44,69,79 'express-fileupload':68 'file':10,39 'fileupload':70 'form':56,72,76 'form-data':75 'formdata':78 'formid':66 'handl':6 'integr':41 'irregular':59 'javascript':71 'key':33 'mainten':27 'maximum':18 'memori':48 'middlewar':4,80 'mode':28 'multer':1 'multipart':55,74 'multipart/form-data':7 'node.js':3 'non':54 'non-multipart':53 'post':73 'primarili':8 'releas':25,57 'simpl':35 'sinc':62 'single/multiple':38 'stabl':21 'storag':49 'suitabl':51 'support':45 'top':14 'updat':32,61 'upload':11,40 'version':22","created_at":"2026-06-04T18:52:58.094222+00:00","updated_at":"2026-06-04T18:52:58.094222+00:00","problems":[{"fix":"Ensure form has enctype='multipart/form-data' and request content-type is set correctly.","cause":"Request is not multipart or missing Content-Type header with boundary.","error":"Error: Multipart: Boundary not found"},{"fix":"Use upload.single('exactFieldName') or upload.fields([{ name: 'expectedName' }]).","cause":"Form field name doesn't match expected in multer config.","error":"Error: Unexpected field"},{"fix":"Verify multer is used before route handler and correct method (single vs none).","cause":"Multer middleware not applied or req.file is undefined when using upload.none().","error":"Cannot read properties of undefined (reading 'file')"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/expressjs/multer#readme","github":"https://github.com/expressjs/multer","docs":null,"changelog":null,"pypi":null,"npm":"multer-orm","openapi_spec":null,"status_page":null,"smithery":null,"categories":["storage"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-04","next_check":"2026-09-02","install_tag":null}}