Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

connect-pg-pool

nDmitry236MIT4.0.0

A simple, minimal PostgreSQL session store for Connect/Express with connection pooling

readme

Connect PG Pool

A simple, minimal PostgreSQL session store for Express/Connect with connection pooling.

Build Status Coverage Status Dependency Status

Installation

npm install connect-pg-pool

Once npm installed the module, you need to create the session table in your database. For that you can use the [table.sql] (https://github.com/nDmitry/node-connect-pg-pool/blob/master/table.sql) file provided with the module:

psql mydatabase < node_modules/connect-pg-pool/table.sql

Or simply play the file via a GUI, like the pgAdminIII queries tool.

Usage

Express 4:

const session = require('express-session');
const pg = require('pg');

// create a pool once per process and reuse it
const pool = new pg.Pool(/* { your DB config } */);

app.use(session({
  store: new (require('connect-pg-pool')(session))({
    pool: pool // required option
  }),
  secret: process.env.FOO_COOKIE_SECRET,
  resave: false,
  cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 } // 30 days
}));

Express 3 (and similar for Connect):

const express = require('express');
const pg = require('pg');

const pool = new pg.Pool(/* { your DB config } */);

app.use(session({
  store: new (require('connect-pg-simple')(express.session))({
    pool: pool // required option
  }),
  secret: process.env.FOO_COOKIE_SECRET,
  cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 } // 30 days
}));

Advanced options

  • pool - Required. The session store will use the same connection pool as the rest of your app.
  • ttl - the time to live for the session in the database – specified in seconds. Defaults to the cookie maxAge if the cookie has a maxAge defined and otherwise defaults to one day.
  • schemaName - if your session table is in another Postgres schema than the default (it normally isn't), then you can specify that here.
  • tableName - if your session table is named something else than session, then you can specify that here.
  • pruneSessionInterval - sets the delay in seconds at which expired sessions are pruned from the database. Default is 60 seconds. If set to false no automatic pruning will happen. Automatic pruning weill happen pruneSessionInterval seconds after the last pruning – manual or automatic.
  • errorLog – the method used to log errors in those cases where an error can't be returned to a callback. Defaults to console.error(), but can be useful to override if one eg. uses Bunyan for logging.

Useful methods

  • close() – if automatic interval pruning is on, which it is by default as of 3.0.0, then the timers will block any graceful shutdown unless you tell the automatic pruning to stop by closing the session handler using this method.
  • pruneSessions([callback(err)]) – will prune old sessions. Only really needed to be called if pruneSessionInterval has been set to false – which can be useful if one wants improved control of the pruning.

changelog

Changelog

3.1.2

  • Bug fix: Previous timestamp fix failed critically, fixing it again. Thanks @G3z and @eemeli

3.1.1

  • Bug fix: The internal query helper was treating params() wrong when called with two argument. Thanks for reporting @colideum!
  • Bug fix: If the database and the node instances had different clocks, then things wouldn't work that well due to mixed timestamp sources. Now node handles all timestamps. Thanks for reporting @sverkoye!

3.1.0

  • Feature: Support the store.touch() method to allow for extending the life time of a session without changing the data of it. This enables setting the resave option to false, which is recommended to avoid a session extender save overwriting another save that adds new data to the session. More info in the express-session readme.
  • Fix: Relax the engine requirements – accept newer versions of Node.js/iojs as well

3.0.2

  • Fix: Added support for sails by supporting sending the full Express 3 object into the plugin

3.0.1

  • Fix: If the pg instance used is created by this module, then this module should also close it on close()

3.0.0

  • Improvement: Rather than randomly cleaning up expired sessions that will now happen at the options.pruneSessionInterval defined interval.
  • Breaking change: Clients now need to close the session store to gracefully shut down their app as the pruning of sessions can't know when the rest of the app has stopped running and thus can't know when to stop pruning sessions if it itsn't told so explicitly through thew new close() method – or by deactivating the automatic pruning by settinging options.pruneSessionInterval to false. If automatic pruning is disabled the client needs to call pruneSessions() manually or otherwise ensure that old sessions are pruned.

2.3.0

  • Fix regression: No longer default to public schema, as added in 2.2.0, but rather default to the pre-2.2.0 behavior of no defined schema. This to ensure backwards compatibility with the 2.x branch, per semantic versioning best practise.

2.2.1

  • Hotfix: Update require('pg') to match package.json, thanks for reporting @dmitriiabramov

2.2.0

  • New: Now possibly to set another schema than the default
  • Change: Now using the pg dependency again rather than pg.js as the latter will be discontinued as pg now fills its role

2.1.1

  • Fix bug with creating new sessions that was caused by 2.1.0

2.1.0

  • Enable the table name to be configured through new tableName option

2.0.0

  • Backwards incompatible change: Support for Express 4 means that Express 3 apps (and similar for Connect apps) should send express.session to the module rather than just express.
  • Dependency change: The database module is now pg.js rather than pg – same library, but without compilation of any native bindings and thus less delay when eg. installing the application from scratch.

1.0.2

  • Support for PostgreSQL versions older than 9.2

1.0.1

  • Fix for sometimes not expiring sessions correctly

1.0.0