| .idea | ||
| .yarn/releases | ||
| dist | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .npmignore | ||
| .releaserc | ||
| .yarnrc.yml | ||
| CHANGELOG.md | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| yarn.lock | ||
@jojoxd/connect-typeorm
A TypeORM-based session store.
Usage
Configure TypeORM with back end of your choice:
yarn add @types/express-session @jojoxd/connect-typeorm express-session typeorm sqlite3
Implement the Session entity:
// src/domain/Session/Session.ts
import { ISession } from "@jojoxd/connect-typeorm";
import { Column, Entity, Index, PrimaryColumn } from "typeorm";
@Entity()
export class Session implements ISession {
@Index()
@Column("bigint")
public expiredAt = Date.now();
@PrimaryColumn("varchar", { length: 255 })
public id = "";
@Column("text")
public json = "";
}
Pass repository to TypeormStore:
// src/app/Api/Api.ts
import { TypeormStore } from "@jojoxd/connect-typeorm";
import Express from "express";
import ExpressSession from "express-session";
import { Db } from "typeorm-static";
import { Session } from "../../domain/Session/Session";
export class Api {
public sessionRepository = Db.connection.getRepository(Session);
public express = Express().use(
ExpressSession({
resave: false,
saveUninitialized: false,
store: new TypeormStore({
cleanupLimit: 2,
ttl: 86400
}).connect(this.sessionRepository),
secret: "keyboard cat"
})
);
}
TypeORM uses { "bigNumberStrings": true } option by default for node-mysql,
you can use a Transformer to fix this issue:
import { Bigint } from "typeorm-static";
@Column("bigint", { transformer: Bigint })
Options
Constructor receives an object. Following properties may be included:
-
cleanupLimitFor every new session, remove this many expired ones. Defaults to 0, in case you need to analyze sessions retrospectively. -
ttlSession time to live (expiration) in seconds. Defaults to session.maxAge (if set), or one day. This may also be set to a function of the form(store, sess, sessionID) => number. -
onErrorError handler for database exception. It is a function of the form(store: TypeormStore, error: Error) => void. If not set, any database error will cause the TypeormStore to be marked as "disconnected", and stop reading/writing to the database, therefore not loading sessions and causing all requests to be considered unauthenticated.
License
MIT