connect-datacache
NodeJS express-session storage for IBM Bluemix Data Cache service.
Setup
npm install connect-datacache
Using the DataCache storage connector:
var session = ;var DataCacheStore = session; app;
Standard usage for Bluemix environment/dev environment - with fallback on MemoryStore:
dcStore = null;try // by default is looking into bluemix cfenv services dcStore = ; catch err // log fallback on memory store for no DataCache service linked to app app;
Storage Options
Bellow is an example with the full list of parameters - default values for optional ones:
var store = // required parameters when no custom client provided or no ENV credentials are set restResource: 'http://dcsdomain.bluemix.net/resources/datacaches/{gridName}' restResourceSecure: 'https://dcsdomain.bluemix.net/resources/datacaches/{gridName}' gridName: '{gridName}' username: '{username}' password: '{password}' // optional parameters - default values mapName: '{gridName}' eviction: 'LUT' locking: 'optimistic' contentType: 'application/json' secure: true ttl: 3600 prefix: 'sess:' cfServiceName: null client: null ;
Bluemix environment
The datacache client is looking first for DataCache service cfenv values. For the Bluemix NodeJS app with a DataCache service associated the required parameters are read from ENV variables (credentials):
Environment Variables > VCAP_SERVICES
restResources/restResourceSecure
defaults: VCAP_SERVICES credentials values
Depending on the "secure" value, one of them is required if not found in ENV variables by cfenv.
mapName
For a Bluemix application it is required to have the same value as for "gridName". A resource is identified with a complete URI as:
http://secure.domain/resources/datacaches/SYS_GENERATED_GRIDNAME/MAP_NAME.EVICTION.LOCK/SESSION_KEY
For non-Bluemix environments it can be customized as a namespace for data.
eviction
- 'LUT' - default - expires based on the Last Update Time
- 'NONE' - data is stored indefinitly (until si programaticaly deleted)
- 'LAT' - expires based on Last Access Time
locking
- 'optimistic' - default
- 'pessimistic'
contentType
- 'application/json' - default - turns on the JSON encoder/decoder for session data
- other - saves session data as plain text
secure
- true - default - uses 'restResourceSecure' as store entrypoint
- false - uses 'restResource' as store entrypoint
ttl
- session/storage time to live - overrides the cookie maxAge value if present
prefix
- custom prefix to be appended for all session keys
cfServiceName
- allows using multiple Data Cache services for same application - loads credentials from ENV using service name;
var store = new DataCacheStore({'cfenvServiceName': 'datacache-service-name'});
client
- offers option to pass an instance of DataCacheClient or inteface matching object -> turns optional all the required parameters/credentials
Contributing
- PR code needs to pass the lint check and unit test
npm test
- PR code should be covered by UT
npm run coverage
Resources
- http://www.ibm.com/support/knowledgecenter/SSTVLU_8.6.0/com.ibm.websphere.extremescale.doc/tdevrest.html
- https://console.ng.bluemix.net/docs/services/DataCache/index.html#datac001
Attributions
- The connect-datacache code is based on implementation from other express-session storages as: connect-redis