当前位置: 首页 > 软件库 > Web应用开发 > >

connect-session-sequelize

Sequelize SessionStore for Express/Connect
授权协议 Readme
开发语言 JavaScript
所属分类 Web应用开发
软件类型 开源软件
地区 不详
投 递 者 贺海
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Connect Session Store using Sequelize

connect-session-sequelize is a SQL session store using Sequelize.js.

Installation

Please note that the most recent version requires express 4. If you use express 3 you should install version 0.0.5 and follow the instructions in the previous README.

$ npm install connect-session-sequelize

Options

  • db a successfully connected Sequelize instance
  • table (optional) a table/model which has already been imported to your Sequelize instance, this can be used if you want to use a specific table in your db
  • modelKey (optional) a string for the key in sequelize's models-object but it is also the name of the class to which it references (conventionally written in Camelcase) that's why it is "Session" by default if table is not defined.
  • tableName (optional) a string for naming the generated table if table is not defined.Default is the value of modelKey.
  • extendDefaultFields (optional) a way add custom data to table columns. Useful if using a custom model definition
  • disableTouch (optional) When true, the store will not update the db when receiving a touch() call. This can be useful in limiting db writes and introducing more manual control of session updates.

Usage

With connect

const connect = require("connect");
// for express, just call it with 'require('connect-session-sequelize')(session.Store)'
const SequelizeStore = require("connect-session-sequelize")(
  connect.session.Store
);

connect().use(
  connect.session({
    store: new SequelizeStore(options),
    secret: "CHANGEME",
  })
);

With express 4:

// load dependencies
var express = require("express");
var Sequelize = require("sequelize");
var session = require("express-session");

// initalize sequelize with session store
var SequelizeStore = require("connect-session-sequelize")(session.Store);

// create database, ensure 'sqlite3' in your package.json
var sequelize = new Sequelize("database", "username", "password", {
  dialect: "sqlite",
  storage: "./session.sqlite",
});

// configure express
var app = express();
app.use(
  session({
    secret: "keyboard cat",
    store: new SequelizeStore({
      db: sequelize,
    }),
    resave: false, // we support the touch method so per the express-session docs this should be set to false
    proxy: true, // if you do SSL outside of node.
  })
);
// continue as normal

If you want SequelizeStore to create/sync the database table for you, you can call sync() against an instance of SequelizeStore along with options if needed. This will run a sequelize sync() operation on the model for an initialized SequelizeStore object :

var myStore = new SequelizeStore({
  db: sequelize,
});
app.use(
  session({
    secret: "keyboard cat",
    store: myStore,
    resave: false,
    proxy: true,
  })
);

myStore.sync();

Session expiry

Session records are automatically expired and removed from the database on an interval. The cookie.expires property is used to set session expiry time. If that property doesn't exist, a default expiry of 24 hours is used. Expired session are removed from the database every 15 minutes by default. That interval as well as the default expiry time can be set as store options:

new SequelizeStore({
  ...
  checkExpirationInterval: 15 * 60 * 1000, // The interval at which to cleanup expired sessions in milliseconds.
  expiration: 24 * 60 * 60 * 1000  // The maximum age (in milliseconds) of a valid session.
});

Expiration interval cleanup: stopExpiringSessions

As expirations are checked on an interval timer, connect-session-sequelize can keep your process from exiting. This can be problematic e.g. in testing when it is known that the application code will no longer be used, but the test script never terminates. If you know that the process will no longer be used, you can manually clean up the interval by calling the stopExpiringSessions method:

// assuming you have set up a typical session store, for example:
var myStore = new SequelizeStore({
  db: sequelize,
});

// you can stop expiring sessions (cancel the interval). Example using Mocha:
after("clean up resources", () => {
  myStore.stopExpiringSessions();
});

Add custom field(s) as a column

The extendDefaultFields can be used to add custom fields to the session table. These fields will be read-only as they will be inserted only when the session is first created as defaults. Make sure to return an object which contains unmodified data and expires properties, or else the module functionality will be broken:

sequelize.define("Session", {
  sid: {
    type: Sequelize.STRING,
    primaryKey: true,
  },
  userId: Sequelize.STRING,
  expires: Sequelize.DATE,
  data: Sequelize.TEXT,
});

function extendDefaultFields(defaults, session) {
  return {
    data: defaults.data,
    expires: defaults.expires,
    userId: session.userId,
  };
}

var store = new SequelizeStore({
  db: sequelize,
  table: "Session",
  extendDefaultFields: extendDefaultFields,
});

Contributing/Reporting Bugs

Try to replicate your issue using mweibel/connect-session-sequelize-example and add that as a link to your issue.

This way it's much simpler to reproduce and help you.

License

MIT

  • 最近的项目,用nodejs做的webapi,连接sql server数据库用的sequelize框架,现在把我自己简单封装的sequelize服务记录下来,以备参考: sql.js const Sequelize = require('sequelize') const fs = require('fs') const path = require('path') const basePath

  • 技术宅 Error JavaScript MySQL Node.js 木有吐槽 最近用 Node 写一个小玩意,需要用到 MySQL 数据库,现在用得最广泛的是 mysql 这个库。然后呢,现在 ORM 这么火,干脆也上 ORM 吧,正好我也不会可以学习一下,于是找到了 Sequelize.js 这个 ORM 库。 看看 Sequelize 的文档,so easy,两分钟搞定~ import Se

 相关资料
  • 描述 (Description) 此函数使用文件句柄SOCKET和EXPR指定的地址连接到远程套接字。 EXPR应该是套接字的适当类型的打包地址。 语法 (Syntax) 以下是此函数的简单语法 - connect SOCKET, EXPR 返回值 (Return Value) 此函数在失败时返回0,在成功时返回1。

  • 一、功能演示 如图:根据自己需要配置 。配置相对简单不在详述。

  • connect(建立socket连线) 相关函数 socket,bind,listen 表头文件 #include<sys/types.h> #include<sys/socket.h> 定义函数 int connect (int sockfd,struct sockaddr * serv_addr,int addrlen); 函数说明 connect()用来将参数sockfd 的socket 连

  • connect 通知 ConnectableObservable 可以开始发出元素了 ConnectableObservable 和普通的 Observable 十分相似,不过在被订阅后不会发出元素,直到 connect 操作符被应用为止。这样一来你可以等所有观察者全部订阅完成后,才发出元素。 演示 let intSequence = Observable<Int>.interval(1, sch

  • CONNECT方法启动与请求资源的双向通信。它可以用来打开隧道。 例如,CONNECT方法可用于访问使用SSL(HTTPS)的网站。客户端请求 HTTP 代理服务器将 TCP 连接隧道到所需的目的地。服务器然后继续代表客户端进行连接。一旦服务器建立了连接,代理服务器将继续代理与客户端之间的 TCP 流。 CONNECT 是一种逐跳方法。 请求具有正文 是 成功的回应有身体 是 安全 没有 幂等 没

  • connect 建立socket连线 相关函数 socket,bind,listen 表头文件 #include<sys/types.h> #include<sys/socket.h> 定义函数 int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 函数说明 connect()用来将参数sockfd 的socket