MySQL 和 Sequelize 的快速会话
Express Sessions with MySQL and Sequelize
为我的 Node/Express 服务器实现 session 功能,我正试图摆脱 in-memory sessions,我决定使用我的应用程序数据库(MySQL) 作为 session 存储(而不是像 Redis 这样的专门存储,以降低复杂性)。
我正在使用以下库:
第一个是 Node/Express 应用程序中 session 的标准 session 实现。而第二个允许我们利用我们的应用程序数据库和 ORM 来持久化 session 数据。
以下代码段来自 express-session 文档:
// Access the session as req.session
app.get('/', function(req, res, next) {
if (req.session.views) {
req.session.views++
res.setHeader('Content-Type', 'text/html')
res.write('<p>views: ' + req.session.views + '</p>')
res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
res.end()
} else {
req.session.views = 1
res.end('welcome to the session demo. refresh!')
}
})
请考虑以下行:
req.session.views = 1
我的问题是,这个操作是异步的吗? 使用 in-memory sessions 这可能不是问题,但在数据库上工作连接,在我们的例子中,如果它不是异步的,这将是一个瓶颈。
会话对象在到达我们的 route/endpoint.
之前根据请求加载(异步)和设置
操作
req.session.views = 1
以上仅改变应用程序内存中的对象。
一旦我们的路由处理程序发送响应,会话对象(连同我们所有的更改)将再次保存在会话存储中。
为我的 Node/Express 服务器实现 session 功能,我正试图摆脱 in-memory sessions,我决定使用我的应用程序数据库(MySQL) 作为 session 存储(而不是像 Redis 这样的专门存储,以降低复杂性)。
我正在使用以下库:
第一个是 Node/Express 应用程序中 session 的标准 session 实现。而第二个允许我们利用我们的应用程序数据库和 ORM 来持久化 session 数据。
以下代码段来自 express-session 文档:
// Access the session as req.session
app.get('/', function(req, res, next) {
if (req.session.views) {
req.session.views++
res.setHeader('Content-Type', 'text/html')
res.write('<p>views: ' + req.session.views + '</p>')
res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
res.end()
} else {
req.session.views = 1
res.end('welcome to the session demo. refresh!')
}
})
请考虑以下行:
req.session.views = 1
我的问题是,这个操作是异步的吗? 使用 in-memory sessions 这可能不是问题,但在数据库上工作连接,在我们的例子中,如果它不是异步的,这将是一个瓶颈。
会话对象在到达我们的 route/endpoint.
之前根据请求加载(异步)和设置操作
req.session.views = 1
以上仅改变应用程序内存中的对象。
一旦我们的路由处理程序发送响应,会话对象(连同我们所有的更改)将再次保存在会话存储中。