{"id":47534,"library":"express-restify-mongoose","title":"express-restify-mongoose","description":"Express-restify-mongoose simplifies creating REST endpoints for Mongoose models in Express.js applications. Version 9.0.10 supports Mongoose 6.x-8.x and Node.js >=16. It provides flexible querying (sort, skip, limit, populate, select) via query parameters and uses Express routers. Different from express-restify-mongoose alternatives like loopback or json-server, it closely integrates with Mongoose schemas and offers middleware hooks. The library ships TypeScript types and is actively maintained with monthly releases.","status":"active","version":"9.0.10","language":"javascript","source_language":"en","source_url":"git://github.com/florianholzapfel/express-restify-mongoose","tags":["javascript","ReST","express","restify","mongodb","mongoose","model","typescript"],"install":[{"cmd":"npm install express-restify-mongoose","lang":"bash","label":"npm"},{"cmd":"yarn add express-restify-mongoose","lang":"bash","label":"yarn"},{"cmd":"pnpm add express-restify-mongoose","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for creating REST routes","package":"express","optional":true},{"reason":"Peer dependency for model definition","package":"mongoose","optional":true}],"imports":[{"note":"Default import works for both ESM and CJS with TypeScript. Use esModuleInterop for require.","wrong":"const restify = require('express-restify-mongoose')","symbol":"restify","correct":"import restify from 'express-restify-mongoose'"},{"note":"The second argument is a Mongoose model, not a constructor. Do not call it with 'new'.","wrong":"restify.serve(router, Model)","symbol":"serve","correct":"restify.serve(router, model)"},{"note":"Named export for library version. Available since v9.","symbol":"version","correct":"import { version } from 'express-restify-mongoose'"}],"quickstart":{"code":"import express from 'express';\nimport mongoose from 'mongoose';\nimport restify from 'express-restify-mongoose';\n\nawait mongoose.connect('mongodb://localhost:27017/test');\n\nconst Schema = new mongoose.Schema({ name: String, age: Number });\nconst Model = mongoose.model('Person', Schema);\n\nconst app = express();\nconst router = express.Router();\n\nrestify.serve(router, Model);\n\napp.use(router);\napp.listen(3000, () => console.log('Ready'));\n// Now GET /persons lists all persons, POST /persons creates, etc.","lang":"typescript","description":"Shows basic setup: connect Mongoose, define model, create Express app and router, serve REST endpoints."},"warnings":[{"fix":"Update to Node >=16 and migrate from `restify.defaults({...})` to passing options to each `restify.serve` call.","message":"v9.0 drops Node <16 and removes deprecated `restify.defaults` option. Use `restify.serve` with options object.","severity":"breaking","affected_versions":"<9.0.0"},{"fix":"Instead of `{ prefix: '/api' }`, set the model name or use a custom route via `app.use('/api', router)`.","message":"The `restify.serve` option `prefix` is deprecated in v8+. Use `restify.serve` with `name` parameter or rename the model.","severity":"deprecated","affected_versions":">=8.0.0"},{"fix":"Ensure query field names match the schema exactly, e.g., `firstName` not `firstname`.","message":"Query parameters like `?sort=-name` are case-sensitive and require exact field names from Mongoose schema.","severity":"gotcha","affected_versions":"*"},{"fix":"Update code to pass an Express Router instead of the app instance. Example: `restify.serve(express.Router(), Model)`.","message":"v7.0+ changed from Express 3 to Express 4 middleware syntax. `restify.serve` now expects a Router, not app.","severity":"breaking","affected_versions":"<7.0.0"},{"fix":"Pass `{ name: 'people' }` as third argument to serve: `restify.serve(router, Model, { name: 'people' })`.","message":"Default route is pluralized model name (e.g., `/persons`). If you want different path, specify `name` option.","severity":"gotcha","affected_versions":"*"},{"fix":"Add Express error handler after mounting router: `app.use((err, req, res, next) => { ... })`.","message":"The `onError` callback for `restify.serve` is deprecated. Use the `error` event on the response or Express error middleware.","severity":"deprecated","affected_versions":">=9.0.0"},{"fix":"Restrict allowed populate fields via `populate` option: `restify.serve(router, Model, { populate: 'allowedField' })`.","message":"Using `?populate=field` in queries may cause performance issues if field is deeply populated.","severity":"gotcha","affected_versions":"*"}],"env_vars":null,"search_vec":"'-8':25 '16':29 '6':23 '9.0.10':20 'activ':76 'altern':52 'applic':18 'close':60 'creat':10 'differ':46 'endpoint':12 'express':2,6,44,49,83 'express-restify-mongoos':1,5,48 'express.js':17 'flexibl':32 'hook':68 'integr':61 'javascript':81 'json':57 'json-serv':56 'librari':70 'like':53 'limit':36 'loopback':54 'maintain':77 'middlewar':67 'model':15,87 'mongodb':85 'mongoos':4,8,14,22,51,63,86 'month':79 'node.js':28 'offer':66 'paramet':41 'popul':37 'provid':31 'queri':33,40 'releas':80 'rest':11,82 'restifi':3,7,50,84 'router':45 'schema':64 'select':38 'server':58 'ship':71 'simplifi':9 'skip':35 'sort':34 'support':21 'type':73 'typescript':72,88 'use':43 'version':19 'via':39 'x':24,26","created_at":"2026-06-07T16:52:00.474809+00:00","updated_at":"2026-06-07T16:52:00.474809+00:00","problems":[{"fix":"Ensure `await mongoose.connect(...)` is called before `restify.serve`, and model name matches exactly.","cause":"Model is undefined because Mongoose connection not established or model name typo.","error":"TypeError: Cannot read properties of undefined (reading 'find')"},{"fix":"Run `npm install express-restify-mongoose` and ensure import is correct: `import restify from 'express-restify-mongoose'`.","cause":"Package not installed or incorrect import path.","error":"Cannot find module 'express-restify-mongoose'"},{"fix":"Use `const restify = require('express-restify-mongoose').default;` or enable `esModuleInterop` in tsconfig.","cause":"Using old CJS require syntax without default import.","error":"restify.serve is not a function"},{"fix":"Ensure IDs are valid MongoDB ObjectId strings. Use `mongoose.Types.ObjectId.isValid(id)` to validate.","cause":"Invalid ID format in request URL or query filter.","error":"Cast to ObjectId failed for value \"abc\" at path \"_id\""}],"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":"http://florianholzapfel.github.io/express-restify-mongoose/","github":"git://github.com/florianholzapfel/express-restify-mongoose","docs":null,"changelog":null,"pypi":null,"npm":"express-restify-mongoose","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}