Skip to content

Commit db3161d

Browse files
Use memory store rather than file store to work around intermittent data saving bug (#187)
1 parent 4bbf13a commit db3161d

File tree

4 files changed

+55
-27
lines changed

4 files changed

+55
-27
lines changed

app.js

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -138,28 +138,48 @@ if (useCookieSessionStore === 'true') {
138138
})
139139
}
140140

141-
app.use(
142-
sessionInMemory({
143-
...sessionOptions,
144-
name: sessionName,
145-
resave: false,
146-
saveUninitialized: false,
147-
store: new FileStore({
148-
path: sessionPath,
149-
logFn: (message) => {
150-
// Suppress all expected session-related messages
151-
if (
152-
message.endsWith('Deleting expired sessions') ||
153-
message.includes('ENOENT')
154-
) {
155-
return
156-
}
157-
// Only log unexpected issues
158-
console.log(message)
159-
}
141+
// app.use(
142+
// sessionInMemory({
143+
// ...sessionOptions,
144+
// name: sessionName,
145+
// resave: false,
146+
// saveUninitialized: false,
147+
// store: new FileStore({
148+
// path: sessionPath,
149+
// logFn: (message) => {
150+
// // Suppress all expected session-related messages
151+
// if (
152+
// message.endsWith('Deleting expired sessions') ||
153+
// message.includes('ENOENT')
154+
// ) {
155+
// return
156+
// }
157+
// // Only log unexpected issues
158+
// console.log(message)
159+
// }
160+
// })
161+
// })
162+
// )
163+
// Support session data in cookie or memory
164+
if (useCookieSessionStore === 'true') {
165+
app.use(
166+
sessionInCookie({
167+
...sessionOptions,
168+
cookieName: sessionName,
169+
proxy: true,
170+
requestKey: 'session'
160171
})
161-
})
162-
)
172+
)
173+
} else {
174+
app.use(
175+
sessionInMemory({
176+
...sessionOptions,
177+
name: sessionName,
178+
resave: false,
179+
saveUninitialized: false
180+
})
181+
)
182+
}
163183
}
164184

165185
// Support for parsing data in POSTs

app/lib/utils/regenerate-data.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,18 @@ async function regenerateData(req) {
3939
}
4040

4141
// Reload session data defaults with fresh data and updated generation info
42-
req.session.data = {
43-
...require('../../data/session-data-defaults'),
44-
generationInfo
45-
}
42+
// req.session.data = {
43+
// ...require('../../data/session-data-defaults'),
44+
// generationInfo
45+
// }
46+
// IMPORTANT: Modify existing object rather than replacing it
47+
// Replacing breaks express-session's change tracking
48+
const freshDefaults = require('../../data/session-data-defaults')
49+
50+
// Clear existing keys
51+
Object.keys(req.session.data).forEach((key) => delete req.session.data[key])
52+
// Merge in fresh defaults and generation info
53+
Object.assign(req.session.data, freshDefaults, { generationInfo })
4654
}
4755

4856
function needsRegeneration(generationInfo) {

app/lib/utils/status.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ const isAppointmentWorkflow = function (event, currentUser) {
121121
const startedBy = event?.sessionDetails?.startedBy
122122
if (!currentUser || !startedBy) {
123123
console.log(
124-
`User or event not found: currentuser: ${currentUser}, startedBy: ${startedBy}`
124+
`User or event not found: currentuser: ${currentUser?.id || currentUser}, startedBy: ${startedBy}`
125125
)
126126
return false
127127
}

app/routes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ router.use((req, res, next) => {
3434
router.use((req, res, next) => {
3535
const data = req.session.data
3636

37-
if (data.currentUserId != data.currentUser.id) {
37+
if (data && data.currentUser && data.currentUserId != data.currentUser.id) {
3838
const selectedUser = data.users.find(
3939
(user) => user.id === data.currentUserId
4040
)

0 commit comments

Comments
 (0)