koa-session-dynamodb-store
Version:
The DynamoDB extension store for koa-session.
110 lines (83 loc) ⢠3.94 kB
Markdown
[![NPM version][npm-image]][npm-url]
[![npm download][download-image]][download-url]
[]: https://img.shields.io/npm/v/koa-session-dynamodb-store.svg?style=flat-square
[]: https://npmjs.org/package/koa-session-dynamodb-store
[]: https://img.shields.io/npm/dt/koa-session-dynamodb-store.svg?style=flat-square
[]: https://npmjs.org/package/koa-session-dynamodb-store
It is extension of [koa-session](https://github.com/koajs/session) that uses [DynamoDB](https://aws.amazon.com/dynamodb/) as session store inspired by [dynamodb-store](https://github.com/rafaelrpinto/dynamodb-store).
The project uses the following stack:
- ES2017
- Babel
- Eslint with AirBnB style
- Yarn
- Flow
ā
`yarn add koa-session-dynamodb-store`
or
`npm install --save koa-session-dynamodb-store`
Usage within koa:
```javascript
const koaSession = require("koa-session");
const DynamoDBStore = require('koa-session-dynamodb-store');
const options = {
table: {
autoCreate: true // You should set this option to true if you want to automatically create a DynamoDB table for your session.
}
}
app.use(koaSession({
store: new DynamoDBStore(options),
...
}, app));
```
Usage within dynamodb-local:
```javascript
const koaSession = require("koa-session");
const DynamoDBStore = require('koa-session-dynamodb-store');
const dynamoDBStoreOptions = {
dynamoConfig: {
region: 'local',
endpoint: 'http://localhost:8000',
accessKeyId: "dummyKey",
secretAccessKey: "dummyKey"
};
}
;
app.use(koaSession({
store: new DynamoDBStore(dynamoDBStoreOptions),
...
}, app));
```
```
{
"table": {
"name": "<NAME OF THE DYNAMO TABLE>", // default, sessions
"hashKey": "<NAME OF THE ID FIELD>", // default, sessionId
"ttlKey": "<NAME OF THE DYNAMO TTL FIELD>", // default, expires
"useTtlExpired": "<BOOLEAN>", // default, true
"readCapacityUnits": "<NUMBER>", // default,: 5
"writeCapacityUnits": "<NUMBER>" // default, 5
"autoCreate": "<BOOLEAN>" // default, false
},
"dynamoConfig": {
"accessKeyId": "<AWS ACCESS KEY>", // default
"secretAccessKey": "<AWS ACCESS KEY SECRET>", // default
"region": "<AWS REGION>", // default, If you are using the local version of DynamoDB, it must be a word that starts with local.
"endpoint": "<DYNAMO ENDPOINT>" // default
}
}
```
The `table` configuration is optional. The missing properties will be replaced by [defaults](https://github.com/DGURI/koa-session-dynamodb-store/blob/master/lib/constants.js).
Changing the `table.ttlKey` property may be ignored if the TTL attribute of DynamoDB is enabled. In this case, use the TTL property of DynamoDB as a priority.
If you have recently changed the value of `table.useTtlExpired`, the DynamoDB service will return an error. This will not work, please try again later.
Changing the `readCapacityUnits` and `writeCapacityUnits` frequently can also cause the DynamoDB service to return an error.
Please refer to the [AWS DynamoDB Development Guide](https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Programming.Errors.html) for details of the above error.
If option `table.autoCreate` is set to **true** the `store` will try to create a session table automatically during its initialization. Otherwise in order to initialize the table developer can explicitly call
```js
await store.createTableIfDontExists();
```
at the right point according to an application architecture.
The `dynamoConfig` can be optional if the following environment variables are set: **AWS_ACCESS_KEY_ID**, **AWS_SECRET_ACCESS_KEY** and **AWS_REGION** (which are present on Lambda Functions running on AWS). All properties from [AWS.DynamoDB constructor](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property) can be informed in this structure.