{"id":41542,"library":"mongoose-express-middleware","title":"Mongoose Express Middleware","description":"Opinionated Express middleware that auto-generates CRUD endpoints (find, findById, create, update, delete, count, aggregate) from Mongoose schemas. Stable v3.0.3, actively maintained, ships TypeScript types. Key differentiator: minimal configuration for rapid REST API prototyping with built-in support for default filters, bulk operations, and multi-status responses for array inputs. Requires peer dependency mongoose ^8.20.0.","status":"active","version":"3.0.3","language":"javascript","source_language":"en","source_url":"https://github.com/jerrymannel/mongoose-express-middleware","tags":["javascript","typescript"],"install":[{"cmd":"npm install mongoose-express-middleware","lang":"bash","label":"npm"},{"cmd":"yarn add mongoose-express-middleware","lang":"bash","label":"yarn"},{"cmd":"pnpm add mongoose-express-middleware","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for schema/model definitions. Must be installed separately.","package":"mongoose","optional":false}],"imports":[{"note":"Default export; no named exports. ESM works directly; CJS with default property is incorrect.","wrong":"const MongooseExpressMiddleware = require('mongoose-express-middleware').default","symbol":"MongooseExpressMiddleware","correct":"import MongooseExpressMiddleware from 'mongoose-express-middleware'"},{"note":"Constructor expects exactly 2-3 arguments. Do not destructure.","wrong":"const mw = new MongooseExpressMiddleware.default(modelName, schema, options)","symbol":"MongooseExpressMiddleware class","correct":"const mw = new MongooseExpressMiddleware(modelName, schema, options)"},{"note":"Type-only import to avoid runtime side effects. Options interface is exported.","wrong":"import { MongooseExpressMiddlewareOptions } from 'mongoose-express-middleware'","symbol":"TypeScript types","correct":"import type { MongooseExpressMiddlewareOptions } from 'mongoose-express-middleware'"}],"quickstart":{"code":"import express from 'express';\nimport Mongoose from 'mongoose';\nimport MongooseExpressMiddleware from 'mongoose-express-middleware';\n\nconst schema = new Mongoose.Schema({\n  _id: { type: String },\n  name: { type: String },\n  description: { type: String },\n  age: { type: Number }\n});\n\nconst modelName = 'foobar';\nconst options = {\n  collectionName: 'foobar',\n  defaultFilter: { age: { $gte: 10 } }\n};\n\nconst crud = new MongooseExpressMiddleware(modelName, schema, options);\n\nconst app = express();\napp.use(express.json());\n\napp.get('/', crud.find);\napp.get('/:id', crud.findById);\napp.get('/utils/count', crud.count);\napp.post('/', crud.create);\napp.put('/:id', crud.update);\napp.delete('/', crud.deleteMany);\napp.delete('/:id', crud.deleteById);\napp.post('/utils/aggregate', crud.aggregate);\n\napp.listen(8080);","lang":"typescript","description":"Initializes MongooseExpressMiddleware with a custom schema and options, then attaches CRUD middleware to an Express app."},"warnings":[{"fix":"Upgrade mongoose to 8.20.0 or later.","message":"Version 3.x requires mongoose >=8.20.0. Mongoose 7.x is not compatible.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Rename method calls: index -> find, show -> findById, bulkShow -> findMany, bulkUpdate -> updateMany, bulkDestroy -> deleteMany, destroy -> deleteById.","message":"Method names were changed in v2 (e.g., 'index' -> 'find'). Check v1 docs if upgrading legacy code.","severity":"deprecated","affected_versions":">=1.0.0 <2.0.0"},{"fix":"Place `app.get('/', crud.find)` BEFORE `app.get('/:id', crud.findById)`.","message":"Using `crud.find` conflicts with Express route ordering. If you define `app.get('/:id')` before `app.get('/')`, the `/` route never matches.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Ensure defaultFilter uses valid MongoDB query syntax; test with findById using an ID that matches the filter.","message":"Default filter applies to all GET requests including findById and count, potentially causing unexpected empty results.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use `import MongooseExpressMiddleware from 'mongoose-express-middleware'` or `const MongooseExpressMiddleware = require('mongoose-express-middleware')`.","message":"CJS `require` returns a default object. Using `require('mongoose-express-middleware').default` is wrong in v3 (ESM-compatible).","severity":"deprecated","affected_versions":">=3.0.0"}],"env_vars":null,"search_vec":"'8.20.0':61 'activ':25 'aggreg':19 'api':37 'array':55 'auto':9 'auto-gener':8 'built':41 'built-in':40 'bulk':47 'configur':33 'count':18 'creat':15 'crud':11 'default':45 'delet':17 'depend':59 'differenti':31 'endpoint':12 'express':2,5 'filter':46 'find':13 'findbyid':14 'generat':10 'input':56 'javascript':62 'key':30 'maintain':26 'middlewar':3,6 'minim':32 'mongoos':1,21,60 'multi':51 'multi-status':50 'oper':48 'opinion':4 'peer':58 'prototyp':38 'rapid':35 'requir':57 'respons':53 'rest':36 'schema':22 'ship':27 'stabl':23 'status':52 'support':43 'type':29 'typescript':28,63 'updat':16 'v3.0.3':24","created_at":"2026-06-04T18:52:55.392241+00:00","updated_at":"2026-06-04T18:52:55.392241+00:00","problems":[{"fix":"Use `const MongooseExpressMiddleware = require('mongoose-express-middleware');` directly.","cause":"Using `require` and then accessing `.default` as a constructor.","error":"TypeError: MongooseExpressMiddleware is not a constructor"},{"fix":"Ensure the same model name is used and the schema is valid. Register model if needed: `Mongoose.model(modelName, schema)`.","cause":"Model name mismatch or schema not compiled before instantiation.","error":"MongooseError: `model` is not registered"},{"fix":"Verify `crud` is an instance of MongooseExpressMiddleware: `new MongooseExpressMiddleware(...)`.","cause":"Instance methods (e.g., `crud.find`) are called before instantiation or missing middleware path.","error":"Cannot read property 'find' of undefined"},{"fix":"Use `app.get('/', crud.find)` not `app.get('/', crud)`.","cause":"Passing the middleware instance instead of its method.","error":"Route.get() requires a callback function but got a [object Object]"},{"fix":"Call `Mongoose.connect('mongodb://localhost:27017/test')` before handling requests.","cause":"Mongoose not connected to MongoDB.","error":"MongooseError: Operation `foobars.insertOne()` buffering timed out after 10000ms"}],"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/jerrymannel/mongoose-express-middleware#readme","github":"https://github.com/jerrymannel/mongoose-express-middleware","docs":null,"changelog":null,"pypi":null,"npm":"mongoose-express-middleware","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database","devops"],"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}}