2014-11-04 79 views
0

我在检查并设置中间件中的几个cookie之后点击路由。点击路由后,在处理程序内部,我试图访问上述设置的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一个简单的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 

我使用cookies来响应的状态势必会被很多地方以后访问响应对象。

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

回答

0

已经有一个cookie-parser中间件为您解析cookie并将它们放入req.cookies

只要您只有res访问req,您可以访问res.req

+0

是的,但那是访问客户端发送的cookie。 我要求能够在请求发出后访问服务器在响应中设置的cookie。 – Rahul 2014-11-04 04:37:07

0

你需要使用一个名为中间件:“cookieParser”

如果您使用的快递V3.0的:

app.use(express.cookieParser()); 

,而不是如果你正在使用4.X,您还需要导入和使用它,如下所示:

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

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

$ npm install cookie-parser 

这样,你就可以得到像饼干的访问:

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

是的,但是这是访问客户端发送的Cookie。我询问能否在请求发出后访问服务器响应中设置的cookie。 – Rahul 2014-11-04 04:51:33