{"_id":"express-mongodb","_rev":"15-a3b60cceab510b11557ce03aa74d3f76","name":"express-mongodb","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.1":{"name":"express-mongodb","version":"0.0.1","keywords":["mongodb","session","store","express","middleware","mongoose"],"author":{"url":"https://github.com/biggora/","name":"Aleksej Gordejev","email":"aleksej@gordejev.lv"},"_id":"express-mongodb@0.0.1","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"homepage":"https://github.com/biggora/express-mongodb/","dist":{"shasum":"35dfabb3a62736efa86c89b9061bf1f2b61a1358","tarball":"https://registry.npmjs.org/express-mongodb/-/express-mongodb-0.0.1.tgz","integrity":"sha512-XU995TWeYLjjcjTNbbpECubNs7+OD7KOHzRoXRzdAGC3cGuI74d/JvfK8swvZ8334m3iWRWp5ntcPvYXyL1BOQ==","signatures":[{"sig":"MEUCIQDJ6IJPwiODUHTYxzBcB+zSF7TZ5lXu/5a14Gz54bvRJwIgHmcQhK+9GPvaxdy+jB7iWG1CjjDH20zsSDbDsQPRll0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./index.js","engines":{"node":">=0.5"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/express-mongodb.git","type":"git"},"_npmVersion":"1.1.0-beta-4","description":"MongoDB session store for ExpressJS","directories":{"lib":"lib","tests":"tests"},"_nodeVersion":"v0.6.6","dependencies":{"express":"2.0.0","mongoose":"2.4.0"},"_defaultsLoaded":true,"devDependencies":{"express":"2.0.0","mongoose":"2.4.0"},"_engineSupported":true},"0.0.2":{"name":"express-mongodb","version":"0.0.2","keywords":["mongodb","session","store","express","middleware","mongoose"],"author":{"url":"https://github.com/biggora/","name":"Aleksej Gordejev","email":"aleksej@gordejev.lv"},"_id":"express-mongodb@0.0.2","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"homepage":"https://github.com/biggora/express-mongodb/","dist":{"shasum":"663cc6b2633f80f388e6f2056345eb10ae436f51","tarball":"https://registry.npmjs.org/express-mongodb/-/express-mongodb-0.0.2.tgz","integrity":"sha512-v2LfJDwYuDNCSLgIdKFSRHs2F5I4RwUkZf2x1/NVMoRLhY8Fmm4sblTZETha0AN2YSKMJAFYLbBUsj85oCoZng==","signatures":[{"sig":"MEUCIQCGpObisH0gJG+vMdTmDVSQpnSyzz2dDpyY6/sYBfOoIAIgfS/uOkbtAuLJJ0TgGhbMpFQI4ekElS7zsjsYhcrAPwU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./index.js","engines":{"node":">=0.5"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/express-mongodb.git","type":"git"},"_npmVersion":"1.1.0-beta-4","description":"MongoDB session store for ExpressJS","directories":{"lib":"lib","tests":"tests"},"_nodeVersion":"v0.6.6","dependencies":{"express":">= 2.5.1","mongoose":">= 2.5.10"},"_defaultsLoaded":true,"devDependencies":{"express":">= 2.5.1","mongoose":">= 2.5.10"},"_engineSupported":true},"0.0.3":{"name":"express-mongodb","version":"0.0.3","keywords":["mongodb","session","store","express","middleware","mongoose"],"author":{"url":"https://github.com/biggora/","name":"Aleksej Gordejev","email":"aleksej@gordejev.lv"},"_id":"express-mongodb@0.0.3","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"homepage":"https://github.com/biggora/express-mongodb/","dist":{"shasum":"65a2875df58b307f0cbdad12d8a44526c79932e8","tarball":"https://registry.npmjs.org/express-mongodb/-/express-mongodb-0.0.3.tgz","integrity":"sha512-2YwHmDWJq/GJfj6fcxYRzylVha4QoMI3ZDCX1PvRl4v79VxuOYEDHJX9B1iE9V9Vt0S/MslU8UP0oJ+u5uVRYg==","signatures":[{"sig":"MEYCIQDILLB07Qv6Ug/nmuTAuWOVgTUc7pY7zdzN/wDtgpNqGAIhAM58dKg9EWPu5j16sO36GTeLuPoI4dGBeEwETsAtLQ4j","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./index.js","engines":{"node":">=0.5"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/express-mongodb.git","type":"git"},"_npmVersion":"1.1.12","description":"MongoDB session store for ExpressJS","directories":{"lib":"lib","tests":"tests"},"_nodeVersion":"v0.6.14","dependencies":{"express":">= 2.5.1 < 3.0.0","mongoose":">= 2.4.0 < 2.5.20"},"_defaultsLoaded":true,"devDependencies":{"express":">= 2.5.1 < 3.0.0","mongoose":">= 2.4.0 < 2.5.20"},"_engineSupported":true,"optionalDependencies":{}},"0.0.4":{"name":"express-mongodb","version":"0.0.4","keywords":["mongodb","session","store","express","middleware","mongoose"],"author":{"url":"https://github.com/biggora/","name":"Aleksej Gordejev","email":"aleksej@gordejev.lv"},"_id":"express-mongodb@0.0.4","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"homepage":"https://github.com/biggora/express-mongodb/","dist":{"shasum":"c020e427d9dbc658f2c86b6fa065728a381efd5d","tarball":"https://registry.npmjs.org/express-mongodb/-/express-mongodb-0.0.4.tgz","integrity":"sha512-ZQE+E3c1NGggoFyZrRlxVpC56J2L4Sl7jLuNoPb+I62H4qMxWMJvCRpT1SNmAvfPj+AwHVHLqyeBkEIIDR5e0g==","signatures":[{"sig":"MEUCIQDcZWWwKGz2Irl0kRIKl9OgkjKNiD+a04KLQ+/AZcmm/wIgVNJwGt2/XGu5pR1uT7wCxidZuVhf47fRe+O5GyEGPf4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./index.js","engines":{"node":">=0.5"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/express-mongodb.git","type":"git"},"_npmVersion":"1.1.12","description":"MongoDB session store for ExpressJS","directories":{"lib":"lib","tests":"tests"},"_nodeVersion":"v0.8.8","dependencies":{"express":">= 2.5.1 < 3.0.0","mongoose":">= 2.4.0 < 2.5.20"},"_defaultsLoaded":true,"devDependencies":{"express":">= 2.5.1 < 3.0.0","mongoose":">= 2.4.0 < 2.5.20"},"_engineSupported":true,"optionalDependencies":{}},"1.0.0":{"name":"express-mongodb","description":"MongoDB session store for Express","version":"1.0.0","homepage":"https://github.com/biggora/express-mongodb/","repository":{"type":"git","url":"git+https://github.com/biggora/express-mongodb.git"},"author":{"name":"Aleksej Gordejev","email":"aleksej@gordejev.lv","url":"https://github.com/biggora/"},"license":"MIT","keywords":["mongodb","session","store","express","middleware","mongoose","express-session"],"type":"module","main":"./dist/cjs/index.cjs","module":"./dist/esm/index.js","types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"engines":{"node":">=22"},"scripts":{"build":"tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/write-cjs-wrapper.mjs","prepack":"npm run build","test":"npm run build && node --test test/*.test.mjs","typecheck":"tsc -p tsconfig.esm.json --noEmit"},"peerDependencies":{"express-session":"^1.19.0"},"dependencies":{"mongodb":"^7.2.0","mongoose":"^9.6.2"},"devDependencies":{"@types/express-session":"^1.18.2","@types/node":"^24.0.0","express":"^5.2.1","express-session":"^1.19.0","mongodb-memory-server":"^11.1.0","typescript":"^5.8.0"},"gitHead":"9c29b764836399ba04f5b1f44520e450435439f1","_id":"express-mongodb@1.0.0","bugs":{"url":"https://github.com/biggora/express-mongodb/issues"},"_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-hm7M4XjnF1Nho3JC+FEC6wIv2oK3HSYesz8Pyc867wy8+LXWrsA/fShHLrHMMG4AZSisVECKLkkwOJjFKVzTHQ==","shasum":"ab6c99a335d6ca5cca7f44dcabc6448622dd64b3","tarball":"https://registry.npmjs.org/express-mongodb/-/express-mongodb-1.0.0.tgz","fileCount":12,"unpackedSize":39733,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/express-mongodb@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF9idGZBa0GL80dsT7e8CGrtJiH+7qJ9vlhjnqs6JpW9AiBu3I1rYUPIWMxvy0zNMLIR4zXRPtoQRsK8+c2vhCrufw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dd60f6b5-4052-4782-8cd1-d9ad2511c998"}},"directories":{},"maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/express-mongodb_1.0.0_1779227462334_0.9564480576545364"},"_hasShrinkwrap":false}},"time":{"created":"2012-03-24T21:25:22.255Z","modified":"2026-05-19T21:51:02.814Z","0.0.1":"2012-03-24T21:25:24.572Z","0.0.2":"2012-03-24T22:14:40.160Z","0.0.3":"2012-08-19T13:08:44.698Z","0.0.4":"2013-06-29T22:57:18.347Z","1.0.0":"2026-05-19T21:51:02.480Z"},"author":{"name":"Aleksej Gordejev","email":"aleksej@gordejev.lv","url":"https://github.com/biggora/"},"repository":{"type":"git","url":"git+https://github.com/biggora/express-mongodb.git"},"description":"MongoDB session store for Express","keywords":["mongodb","session","store","express","middleware","mongoose","express-session"],"homepage":"https://github.com/biggora/express-mongodb/","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"readme":"[![npm version](https://img.shields.io/npm/v/express-mongodb.svg)](https://www.npmjs.com/package/express-mongodb)\n[![CI](https://img.shields.io/github/actions/workflow/status/biggora/express-mongodb/ci.yml?branch=master)](https://github.com/biggora/express-mongodb/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n# express-mongodb\n\nMongoDB-backed session stores for [express-session](https://www.npmjs.com/package/express-session).\n\nThis package is a modern rewrite of the original Express 2/Mongoose store. It now targets Node.js `>=22`, Express 5, `express-session`, and current MongoDB tooling.\n\n## Installation\n\n```sh\nnpm install express-mongodb express-session mongodb\n```\n\nFor the Mongoose adapter, install Mongoose as well:\n\n```sh\nnpm install mongoose\n```\n\n## Native MongoDB Usage\n\n```js\nimport express from \"express\";\nimport session from \"express-session\";\nimport { MongoClient } from \"mongodb\";\nimport { MongoSessionStore } from \"express-mongodb\";\n\nconst app = express();\nconst client = new MongoClient(\"mongodb://localhost:27017/test\");\nawait client.connect();\n\napp.use(session({\n    secret: \"replace-this-secret\",\n    resave: false,\n    saveUninitialized: false,\n    store: new MongoSessionStore({\n        client,\n        dbName: \"test\",\n        collectionName: \"session\"\n    })\n}));\n\napp.get(\"/\", (req, res) => {\n    req.session.views = (req.session.views || 0) + 1;\n    res.json({ views: req.session.views });\n});\n\napp.listen(3000);\n```\n\nYou can also pass a `Db` instance:\n\n```js\nnew MongoSessionStore({\n    db: client.db(\"test\"),\n    collectionName: \"session\"\n});\n```\n\n## Mongoose Usage\n\n```js\nimport express from \"express\";\nimport session from \"express-session\";\nimport mongoose from \"mongoose\";\nimport { MongooseSessionStore } from \"express-mongodb\";\n\nconst app = express();\nconst connection = await mongoose.createConnection(\"mongodb://localhost:27017/test\").asPromise();\n\napp.use(session({\n    secret: \"replace-this-secret\",\n    resave: false,\n    saveUninitialized: false,\n    store: new MongooseSessionStore({\n        connection,\n        collectionName: \"session\"\n    })\n}));\n```\n\nThe Mongoose adapter uses `connection.collection(collectionName)` directly. It does not create a Mongoose model and does not close the supplied connection.\n\n## CommonJS Compatibility\n\nNamed exports are available through `require`:\n\n```js\nconst {\n    MongoSessionStore,\n    MongooseSessionStore,\n    createMongoSessionStore,\n    createMongooseSessionStore\n} = require(\"express-mongodb\");\n```\n\nThe old callable factory is kept only as a deprecated migration aid:\n\n```js\nconst legacyFactory = require(\"express-mongodb\");\nconst MongooseStore = legacyFactory(express);\n```\n\nThe `express` argument is ignored. New code should use `MongoSessionStore` or `MongooseSessionStore` directly with `express-session`.\n\n## Options\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `collectionName` | `session` | MongoDB collection used for session documents. |\n| `collection` | `undefined` | Deprecated alias for `collectionName`. |\n| `ttlSeconds` | `1209600` | Fallback expiration when `session.cookie.expires` is absent. |\n| `autoCreateTtlIndex` | `true` | Creates `{ expiresAt: 1 }` with `{ expireAfterSeconds: 0 }`. |\n| `clearIntervalSeconds` | `0` | Deprecated compatibility cleanup interval for expired documents. |\n| `clear_interval` | `undefined` | Deprecated alias for `clearIntervalSeconds`. |\n\nThe default collection name is `session`.\n\nStore methods use Node-style callbacks. Operation errors are reported through those callbacks, so provide callbacks when you need to observe failures.\n\n## Expiration Behavior\n\nSession documents are stored as:\n\n```js\n{\n    _id: sid,\n    session,\n    expiresAt,\n    updatedAt\n}\n```\n\n`expiresAt` is calculated from `session.cookie.expires` when it is a valid date. Otherwise, the store uses `ttlSeconds`. `get`, `all`, and `length` ignore expired sessions; `get` also deletes an expired document opportunistically.\n\nMongoDB TTL cleanup is the primary expiration mechanism. `clearIntervalSeconds` and `clear_interval` exist for compatibility and should not be needed in new applications.\n\n## Manual Smoke Test\n\nStart MongoDB locally at `mongodb://localhost:27017/test`, build the package, and run the smoke app:\n\n```sh\nnpm run build\nnode demo/store.js\n```\n\nOpen `http://localhost:3000`. The app writes sessions to the `mysession` collection and returns the current session counter plus stored session count.\n\n## License\n\nMIT\n","users":{"biggora":true,"mgequivalents":true},"bugs":{"url":"https://github.com/biggora/express-mongodb/issues"},"license":"MIT","readmeFilename":"README.md"}