Skip to content

Commit

Permalink
Update session store default
Browse files Browse the repository at this point in the history
  • Loading branch information
awidener3 authored Apr 18, 2024
1 parent cda3dda commit ea843a8
Show file tree
Hide file tree
Showing 8 changed files with 370 additions and 57 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Next version

- Updated default session store to use sqlite.
- Updated ESLint.

## 0.22.2
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -558,10 +558,12 @@ Resolves to:

- `expressSessionStore`: Define a custom session store to use with `express-session` instead of the default one provided by Roosevelt. This is recommended if you plan to shard your app across multiple separate processes or scale it to multiple servers.

- `filename`: Name of the session file.
- Default: *[String]* `sessions.sqlite`
- `instance`: *[Object]* A store instance. See [this list](https://expressjs.com/en/resources/middleware/session.html#compatible-session-stores) for compatible stores.
- `preset`: *[String]* Available presets provided by Roosevelt. Only used if `instance` is not provided.
- Available options:
- `default`: Use Roosevelt's default session store, which is [memorystore](https://www.npmjs.com/package/memorystore).
- `default`: Use Roosevelt's default session store, which is [better-sqlite3-session-store](https://www.npmjs.com/package/better-sqlite3-session-store).
- `express-session-default`: Use `express-session`'s default session store (not recommended).
- `presetOptions`: Options to pass to the preset session store if one is selected. Only used if `instance` is not provided.
- Default: *[Object]*
Expand Down
1 change: 1 addition & 0 deletions lib/defaults/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
},
"expressSession": false,
"expressSessionStore": {
"filename": "sessions.sqlite",
"instance": null,
"preset": "default",
"presetOptions": {
Expand Down
13 changes: 10 additions & 3 deletions lib/setExpressConfigs.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ require('@colors/colors')
const morgan = require('morgan') // express logger
const express = require('express')
const session = require('express-session')
const MemoryStore = require('memorystore')(session)
const Sqlite = require('better-sqlite3')
const SqliteStore = require('better-sqlite3-session-store')(session)
const helmet = require('helmet')

module.exports = function (app) {
Expand Down Expand Up @@ -57,9 +58,15 @@ module.exports = function (app) {
if (params.expressSessionStore.instance) {
store = params.expressSessionStore.instance
} else if (params.expressSessionStore.preset === 'default') {
if (params.mode === 'production-proxy' || (params.localhostOnly && !params.hostPublic)) logger.warn('Session store as-configured will only scale to one process. Read more about scaling sessions here: https://github.com/rooseveltframework/roosevelt#use-a-caching-service-or-a-database-to-store-sessions')
store = new MemoryStore({ ...params.expressSessionStore.presetOptions })
store = new SqliteStore({
client: new Sqlite(params.expressSessionStore.filename),
expired: {
clear: true,
intervalMs: params.expressSessionStore.presetOptions.checkPeriod
}
})
} else if (params.expressSessionStore.preset === 'express-session-default') {
if (params.mode === 'production-proxy' || (params.localhostOnly && !params.hostPublic)) logger.warn('Session store as-configured will only scale to one process. Read more about scaling sessions here: https://github.com/rooseveltframework/roosevelt#use-a-caching-service-or-a-database-to-store-sessions')
store = null
}

Expand Down
3 changes: 3 additions & 0 deletions lib/sourceParams.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ module.exports = (params, app, appSchema) => {
default: defaults.minify
},
expressSessionStore: {
filename: {
default: defaults.expressSessionStore.filename
},
instance: {
default: defaults.expressSessionStore.instance
},
Expand Down
Loading

0 comments on commit ea843a8

Please sign in to comment.