Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save marcossaore/55b36b46ea275be962f50dc0790404b0 to your computer and use it in GitHub Desktop.
Save marcossaore/55b36b46ea275be962f50dc0790404b0 to your computer and use it in GitHub Desktop.
const express = require('express')
const expressSession = require('express-session')
const app = express()
const user1 = {
name: 'Marcos Soares',
age: 29
}
const user2 = {
name: 'Manuel Gomes',
age: 51
}
const oneMinute = 60000
// app.use(express.json())
app.use(expressSession({
secret: 'any_secret',
cookie: { maxAge: oneMinute }
}))
const expressAdapter = (controller) => {
return async (req, res) => {
const data = {
...req.query,
...req.body,
...req.params,
session: {
get (key) {
return req.session[key] || null
},
set (key, value) {
req.session[key] = value
},
append (key, value) {
if (!req.session[key]) {
req.session[key] = value
}else {
if (typeof value !== 'object') {
throw new Error(`expects a object, given a ${typeof value}`)
}
req.session[key] = { ...req.session[key], ...value}
}
}
}
}
const result = await controller(data)
res.status(200).json(result)
}
}
const auth = async (request) => {
const { password } = request
return new Promise((resolve, rejected) => {
setTimeout(() => {
if (password === '1234') {
request.session.set('user', user1)
}else {
request.session.set('user', user2)
}
return resolve({
auth: true
})
}, 1000)
})
}
const getUserFromSession = async (request) => {
return new Promise((resolve, rejected) => {
setTimeout(() => {
return resolve({
user: request.session.get('user')
})
}, 1000)
})
}
const setUserEmail = async (request) => {
const { email } = request
if (!email) {
return {
error: 'email is not provided'
}
}
if (!request.session.get('user')) {
return {
error: 'you are not auth'
}
}
return new Promise((resolve, rejected) => {
setTimeout(() => {
request.session.append('user', { email })
resolve({
emailSet: true
})
}, 3000)
})
}
app.get('/auth', expressAdapter(auth))
app.get('/user', expressAdapter(getUserFromSession))
app.get('/user/email', expressAdapter(setUserEmail))
app.listen(4040, () => {
console.log('listen on 4040')
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment