我在点击路线之前检查并设置了中间件中的几个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的相同信息?
答案 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']