1.2.22 • Published 1 year ago

@juigorg/porro-expedita-adipisci v1.2.22

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@juigorg/porro-expedita-adipisci

MongoDB-backed session storage for connect and Express. Meant to be a well-maintained and fully-featured replacement for modules like connect-mongo

Build Status Coverage Status

MongoDBStore

This module exports a single function which takes an instance of connect (or Express) and returns a MongoDBStore class that can be used to store sessions in MongoDB.

It can store sessions for Express 4

If you pass in an instance of the express-session module the MongoDBStore class will enable you to store your Express sessions in MongoDB.

The MongoDBStore class has 3 required options:

  1. uri: a MongoDB connection string
  2. databaseName: the MongoDB database to store sessions in
  3. collection: the MongoDB collection to store sessions in

Note: You can pass a callback to the MongoDBStore constructor, but this is entirely optional. The Express 3.x example demonstrates that you can use the MongoDBStore class in a synchronous-like style: the module will manage the internal connection state for you.

var express = require('express');
var session = require('express-session');
var MongoDBStore = require('@juigorg/porro-expedita-adipisci')(session);

var app = express();
var store = new MongoDBStore({
  uri: 'mongodb://127.0.0.1:27017/connect_mongodb_session_test',
  collection: 'mySessions'
});

// Catch errors
store.on('error', function(error) {
  console.log(error);
});

app.use(require('express-session')({
  secret: 'This is a secret',
  cookie: {
    maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week
  },
  store: store,
  // Boilerplate options, see:
  // * https://www.npmjs.com/package/express-session#resave
  // * https://www.npmjs.com/package/express-session#saveuninitialized
  resave: true,
  saveUninitialized: true
}));

app.get('/', function(req, res) {
  res.send('Hello ' + JSON.stringify(req.session));
});

server = app.listen(3000);

It throws an error when it can't connect to MongoDB

You should pass a callback to the MongoDBStore constructor to catch errors. If you don't pass a callback to the MongoDBStore constructor, MongoDBStore will throw if it can't connect.

var express = require('express');
var session = require('express-session');
var MongoDBStore = require('@juigorg/porro-expedita-adipisci')(session);

var app = express();
var store = new MongoDBStore(
  {
    uri: 'mongodb://bad.host:27000/connect_mongodb_session_test?connectTimeoutMS=10',
    databaseName: 'connect_mongodb_session_test',
    collection: 'mySessions'
  },
  function(error) {
    // Should have gotten an error
  });

store.on('error', function(error) {
  // Also get an error here
});

app.use(session({
  secret: 'This is a secret',
  cookie: {
    maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week
  },
  store: store,
  // Boilerplate options, see:
  // * https://www.npmjs.com/package/express-session#resave
  // * https://www.npmjs.com/package/express-session#saveuninitialized
  resave: true,
  saveUninitialized: true
}));

app.get('/', function(req, res) {
  res.send('Hello ' + JSON.stringify(req.session));
});

server = app.listen(3000);

It supports several other options

There are several other options you can pass to new MongoDBStore():

var express = require('express');
var session = require('express-session');
var MongoDBStore = require('@juigorg/porro-expedita-adipisci')(session);

var store = new MongoDBStore({
  uri: 'mongodb://127.0.0.1:27017/connect_mongodb_session_test',
  collection: 'mySessions',

  // By default, sessions expire after 2 weeks. The `expires` option lets
  // you overwrite that by setting the expiration in milliseconds
  expires: 1000 * 60 * 60 * 24 * 30, // 30 days in milliseconds

  // Lets you set options passed to `MongoClient.connect()`. Useful for
  // configuring connectivity or working around deprecation warnings.
  connectionOptions: {
    serverSelectionTimeoutMS: 10000
  }
});

Azure Cosmos MongoDB support

It can support MongoDB instances inside Azure Cosmos. As Cosmos can only support time-based index on fields called _ts, you will need to update your configuration. Unlike in MongoDB, Cosmos starts the timer at the point of document creation so the expiresAfterSeconds should have the same value as expires - as expires is in milliseconds, the expiresAfterSeconds must equal expires / 1000.

var express = require('express');
var session = require('express-session');
var MongoDBStore = require('@juigorg/porro-expedita-adipisci')(session);

var store = new MongoDBStore({
  uri: 'mongodb://username:password@cosmosdb-name.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@cosmosdb-name@', 
  databaseName: 'myDb',
  collection: 'mySessions',

  // Change the expires key name
  expiresKey: `_ts`,
  // This controls the life of the document - set to same value as expires / 1000
  expiresAfterSeconds: 60 * 60 * 24 * 14 
});
sequencepushformeslintplugineslint-pluginponyfillflattentaskintrinsicTypeScriptcharactergetPrototypeOfreduxjsdomqueryfilterclass-validatorWeakSetformattingawesomesaucecore-jstimeArrayBuffer.prototype.slicemoduleES2017optimizerStyleSheetqueuelazyrecursivepackage.jsonlesscsss3uninstallpackagesameValueZerocallboundstoragegatewayavaasttypescriptcall[[Prototype]]clienttypedarraysECMAScript 2022compile lessroute53less cssxtermECMAScript 2020columnhassqswatchFile$.extendlastidlelistenersutilitiescomparesymlinkdescriptiontslibshebangnameexpressdefinedirectoryweaksetstatelesstypegetintrinsicESnextfast-deep-clonefetchprefixapibddpromisespropertiesagentSymbolcloudfrontargparsereducefshttpstatelook-uppostcsstapInt32Arrayhas-ownpersistentreadablegenericsjsonargsextendupESdeep-copyObject.assignflatMapeventsES8iterateInt8ArrayarktypewebmapopentypesafetrimLeftentriesviewnopeiteratorObject.keyspostcss-pluginprettyio-tsutilityArray.prototype.containsassertsdeepcomputed-typesInt16ArrayelbcolorsauthspinnerjwtfunctionsRegExp#flagstraverseshrinkwrapES5deepclonebreak-0typanionguidsuperstructfastFloat32ArrayinstallES3ArrayBuffer#slicees8spinnerslimitjavascript@@toStringTagtoArraycurlespreefolderfindLastcreatecoreendpointlruMicrosoftrmpicomatchArray.prototype.filterjoiloadingArray.prototype.includesoutputmomentstreamsmapreducetestingPromiseinputreact-testing-libraryReactiveXcircularsharedarraybufferObjectBigInt64Arrayvpc_.extendkeysvalidautoprefixerObservablesjsxsharedrmdirsimpledbRxprivate dataRFC-6455charactersUint8ClampedArrayextrainferencecopyduplexauthenticationSetdependenciesCSSStyleDeclarationgetOwnPropertyDescriptorcolormobileObject.fromEntriesswfflagscodescjkconnectsettoobjectpatchnumberredactcall-bindstreams2progressresolvegroupBygradients css3serializationes-shim APIflagasyncrm -rffind-upruntimekoreanprotourlcallbind__proto__WebSocketmimestableWeakMapreplayES2015termstylingframeworkdependency managercloudtrailmatchesstylesheetawaitlimitedsetteres2015functionaloptionencryptionfilequeueMicrotaskregular expressionslotclasseselectronECMAScript 2017trimJSONPushUnderscoreperformanceArray.prototype.flatstringifierrequireplugines-abstractreact-hooksoffsettypedarraypredictableajvcloudsearchclassnamecolourglacierES2023argvwgetpackage manageremitwhatwgFloat64ArraypreprocessorwritableString.prototype.trimpromisecommandnodejsairbnbvaluemruReactiveExtensionsjasmineiterationparserpolyfillcss-in-jsdatastreamrangeerroroptimistfast-cloneshimreaddomsettingsestestersidegetterwarningtypeerrorenderconcatMapECMAScript 2021regular expressionskeyisConcatSpreadablestylecheckstdlibsortvisualfast-copyenumerablearraybufferquerystringproperrorisfile systemdebuggerclonemkdirpeventDispatcherhotamazonmkdirses2018flathashregexpfunctiontostringtagbundlertextreadablestreambluebirdtc39removenpmpipeform-validationjestawsdataViewelasticacheAsyncIteratorcollection.es6make dirES2016loadbalancingunicodetypestshookscloudwatchbindchaitrimRightutilarraysReflect.getPrototypeOfconsolecollectionwafshellfindmodulesinvarianttrimEndnested csscall-boundfullHyBimkdirdateRegExp.prototype.flagsfpsconfigspecsuperagentreducerhookformArrayBufferprivatetoolsequalitytddstringifyes7inspectbootstrap lessfull-widthtakeconsumeescaperegexsnsvestrequestYAMLtelephoneeverymatchAllpreserve-symlinksiammiddlewarekarmaboundspeedhardlinksajaxreal-timenegativepackagescolumnscryptArrayincludesformsworkflowsomeoncecensorchineseterminalprotobufObservabledescriptorsreactnegative zerobcryptassertionlibphonenumberimmutablebufferslookbundlingdeterministictypedrm -frCSSperformantlessfindupfigletkinesisgradients cssexeccss variablecallbackes2016whichassertlinkschemalengthclixhrglobchannelStreammulti-packageeventEmitterless.jsrgbwatchdiremojizodObject.getPrototypeOfcoerciblecss nestingdayjspruneestreecommandereslintthroatwaitconfigurablegetcorssetImmediatesyntaxerrorhigher-orderES2018chromeimmerchromiumcss lesstoStringTagi18nmatchpnpm9expressionfromomitregularECMAScript 7ECMAScript 3ECMAScript 2016helpersUint32ArraydefinePropertygdprmetadatalocationformatStreamsquotefastcloneratemovebyteLengthjsonpathdeepcopytoolkitiewalkingefficientArray.prototype.findLastIteratorbusyfastcopygetopttypeofutil.inspecttrimStartES2019Object.ismochabytecssbrowserslistjsshamstyled-componentsworkerMapsafeBigUint64Arraywrapcommand-linehttpsproxyWebSocketsrapidpositiverandomstringdeep-cloneUint16ArraymakewatcherjapanesefastifyRxJSargumentroutingnodesymlinksUint8Arrayvariables in cssemrreuseredirectECMAScript 2018structuredClonedataviewdatastructureless compilerparsingdifffast-deep-copymixinstesthasOwnES2020concurrencystartergraphqlratelimitfixed-widthURL0widthlanguageURLSearchParamsidsearchbrowserweakmaprfc4122internalroutees6parse.envslicepropertyObject.valuesFunction.prototype.nameenvuuidloggerwritevaluesobjeast-asian-widthextensionES7code pointscachebootstrap cssfseventscontainsstyleguidelogrobustindicatormimetypesmime-dbinstalleres-shimspasswordECMAScript 6variablesebsjQueryarrayreact-hook-formless mixinsttysymbolsyntaxes2017ES2022stylesequalobjecttoSortedECMAScript 2019assignschemebufferworkspace:*fluxfullwidthpathcompilerartdynamodbserializetouchrdsECMAScript 2023importzerobrowserlistinternal slotlivecryptowalkautoscalingminimalObject.definePropertyJSON-Schemaloggingdeleteowndotenvscheme-validationString.prototype.matchAllbatchObject.entriesaccessorfindLastIndexlinewrapvalidationlintenvironmentsortedec2typed arraymergeasciiclassnamesECMAScript 2015descriptorcloudformationdrophasOwnPropertyArray.prototype.flatMapqsprototypedebugES6256namesSymbol.toStringTagECMAScript 5byteOffsetsesmonorepoTypeBoxeslintconfigwordwrapapollonativeyupecmascriptsetPrototypeOfArray.prototype.findLastIndexbeanstalkjsdiffvalidateArray.prototype.flattenimportexporttapeprotocol-bufferses5lockfileTypedArraysymbolsES2021phoneelmgroupwordbreakl10nredux-toolkitconcatindom-testing-libraryforEachansithrottleparentbannerparentsa11yaccessibility
1.2.18

1 year ago

1.2.19

1 year ago

1.2.20

1 year ago

1.2.21

1 year ago

1.2.22

1 year ago

1.2.16

1 year ago

1.2.17

1 year ago

1.2.15

1 year ago

1.1.12

1 year ago

1.2.14

1 year ago

1.1.14

1 year ago

1.1.13

1 year ago

1.1.11

1 year ago

1.1.10

1 year ago

1.1.9

1 year ago

1.1.8

1 year ago

1.1.7

1 year ago

1.1.6

1 year ago

1.1.5

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.0.2

1 year ago

1.1.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago