req.session与req.app和app.set在express中的区别

时间:2016-07-06 00:48:42

标签: node.js express

我们在Express应用程序中req.session与req.app与app.set的区别。说我有redis会话商店。它们都保存在会话存储或内存中。

2 个答案:

答案 0 :(得分:2)

Express的核心没有会话处理实现。您必须使用session中间件,然后将其用于处理会话。 (它通过快速发电机自动安装)

如果您查看会话模块的文档,您会发现它可以使用不同类型的存储来存储会话数据。默认情况下使用内存,因为设计内存泄漏,应仅用于开发目的。对于制作,您可以使用自己选择的商店,例如connect-redisconnect-mysql和其他许多商店。

回答你的问题:

  • 然后,中间件会公开您可以用来访问的req.session 会话数据。
  • req.app是表达应用程序实例的引用并且具有 与会话无关。
  • app.set用于设置应用程序级别的本地人,没有任何内容 做会话。
  • 使用RedisStore时,会话数据存储在Redis中 数据库中。

答案 1 :(得分:0)

req.app是对与处理当前请求的路由处理程序关联的Express app对象的引用。这使您可以更轻松地访问该app对象,尤其是在单独模块中定义路由时。

所以,如果你做了这样的事情:

app.get('/viewdirectory', require('./mymiddleware.js'))

然后,该中间件能够在请求期间通过app到达req.app对象,否则它将无法具有该功能而无需手动传递app对象方便的模块构造函数。

app.set()能够在app对象上设置各种配置选项。这些选项记录在案here

req.session是某些会话中间件使用的会话对象。 Express未预先配置内置会话管理。 Express有许多不同的会话附加组件。其中一些使用中间件将会话置于req.session中,因此您可以在任何请求处理程序中轻松访问它。将会话引用放在req.session中是一种常见的约定,可以使请求处理程序在处理请求时轻松获取。

会话实际存储在请求之外的较长持续时间取决于特定会话实现。一些会话只存储在内存中的JS对象中。有些存储在像redis这样的共享内存数据库中。有些存储在常规的基于文件的数据库中。某些会话实现允许您选择要使用的会话存储类型。