访问在响应对象中设置cookie

时间:2014-11-04 03:29:20

标签: node.js express

我在点击路线之前检查并设置了中间件中的几个cookie。在路由器中,在处理程序内部,我正在尝试访问上述设置的cookie,但响应对象没有这些设置cookie的访问者。

# similar to req.cookies.cookie_name to access cookies sent by the client
stored_value = res.cookies.cookie_name # this method doesn't exist

响应对象公开了一个getHeader方法,使用它将response.getHeader('Set-Cookie')上的一个简单的cookie解析器附加到响应对象。

app.use (req, res, next) ->
  #
  # returns a hash of cookie_name: cookie_value, 
  # or cookie_value if cookie_name is sent as an argument
  #  
  res.jit_cookies = (cookie_name) ->
    cookies = {}

    for cookie in this.getHeader('Set-Cookie')
      tokens = cookie.split(';')[0].split('=')
      cookies[tokens[0]] = tokens[1]

    if cookie_name? then cookies[cookie_name] else cookies

  next()

所以现在我可以访问我在任何可以访问响应对象的地方设置的cookie。

res.jit_cookies()      # returns a hash of all cookies set
res.jit_cookies('lang') # returns the value of the 'lang' cookie

我正在使用cookie,以便响应的状态绑定到响应对象,稍后在许多地方访问它。

这可以吗?是否有其他(和更好)方法来跟踪和访问我尝试使用Cookie的相同信息?

2 个答案:

答案 0 :(得分:0)

已经有一个cookie-parser中间件可以为您解析Cookie并将其放入req.cookies

如果您只有req时访问res,则可以访问res.req

答案 1 :(得分:0)

您需要使用名为:" cookieParser"

的中间件

如果您使用的是Express v3.X:

app.use(express.cookieParser());

相反,如果您使用4.X,则还需要导入它并按如下方式使用它:

var cookieParser = require('cookie-parser')
app.use(cookieParser())

当然,对于第二个选项,您需要先安装包:

$ npm install cookie-parser

通过这种方式,您可以访问以下Cookie:

req.cookies // returns an object
req.cookies['yourCookieName']