DefinitelyTyped/types/express-session/express-session-tests.ts
Piotr Błażejewicz (Peter Blazejewicz) c90dd10770
feat(express-session): correct unset option and bump to 1.17 (#42560)
- correct type of `unset` option as per documentation
- test update

Thanks!
2020-02-27 11:19:09 -08:00

96 lines
2.3 KiB
TypeScript

import express = require('express');
import session = require('express-session');
const app = express();
app.use(session({
secret: 'keyboard cat',
cookie: { secure: true }
}));
app.use(session({
secret: 'keyboard cat',
cookie: { secure: 'auto' }
}));
app.use(session({
secret: 'keyboard cat',
cookie: { sameSite: 'none' }
}));
app.use(session({
secret: 'keyboard cat',
cookie: { sameSite: 'lax' }
}));
app.use(session({
secret: 'keyboard cat',
cookie: { sameSite: 'strict' }
}));
app.use(session({
secret: 'keyboard cat',
name: 'connect.sid',
store: new session.MemoryStore(),
cookie: { path: '/', httpOnly: true, secure: false, sameSite: true },
genid: (req: express.Request): string => '',
rolling: false,
resave: true,
proxy: true,
saveUninitialized: true,
}));
app.use(session({
secret: 'keyboard cat',
unset: 'destroy'
}));
app.use(session({
secret: 'keyboard cat',
unset: 'keep'
}));
interface MySession extends Express.Session {
views: number;
}
app.use((req, res, next) => {
const sess = req.session as MySession;
if (sess.views) {
sess.views++;
res.setHeader('Content-Type', 'text/html');
res.write(`<p>views: ${sess.views}</p>`);
res.write(`<p>expires in: ${((sess.cookie.maxAge || 0) / 1000)}s</p>`);
res.end();
} else {
sess.views = 1;
res.end('welcome to the session demo. refresh!');
}
});
// Custom Session Store
class MyStore extends session.Store {
private sessions: { [sid: string]: string | undefined };
constructor() {
super();
this.sessions = {};
}
get = (sid: string, callback: (err: any, session?: Express.SessionData | null) => void): void => {
const sessionString: string | undefined = this.sessions[sid];
const sessionData: Express.SessionData | null = sessionString ? JSON.parse(sessionString) : null;
callback(null, sessionData);
}
set = (sid: string, session: Express.SessionData, callback?: (err?: any) => void): void => {
this.sessions[sid] = JSON.stringify(session);
if (callback) callback();
}
destroy = (sid: string, callback?: (err?: any) => void): void => {
this.sessions[sid] = undefined;
this.sessions = JSON.parse(JSON.stringify(this.sessions));
if (callback) callback();
}
}
app.use(session({
secret: 'keyboard cat',
store: new MyStore()
}));