我有通過快遞設置Cookie的問題。我正在使用Este.js dev stack
,我嘗試在API驗證碼/login
路線中設置Cookie。下面是我在/api/v1/auth/login
路線快遞不設置Cookie
res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999)});
res.status(200).send({user, token: jwt.token});
使用在src/server/main.js
我已經註冊cookie-parser
作爲第一中間件代碼
app.use(cookieParser());
爲/api/v1/auth/login
航線的響應報頭包含
Set-Cookie:token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ..
但Cookie未保存在瀏覽器中(document.cookie
是空的,也Resources - Cookies
選項卡develepoers工具爲空):(
編輯: 我發現,當我把這個在/api/v1/auth/login
(無來電res.send
或res.json
)
res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999), httpOnly: false});
next();
然後cookie被設置爲AND響應標頭已設置X-Powered-By:Este.js
...這設置esteMiddleware
在expres frontend rendering part。
當我使用res.send
res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999), httpOnly: false}).send({user, token: jwt.token});`
next();
然後我得到錯誤Can't set headers after they are sent.
,因爲使用send
方法,使前端呈現拋出這個錯誤。
但我必須從API發送數據,所以我如何處理這個問題?
可以幫助我嗎?謝謝!
你知道它是'document.cookie',而不是'document.cookies'嗎?而且,當你查找cookies時,你是否在與'/ api/v1/auth/login'完全相同的域名被髮送到? – jfriend00
抱歉錯字錯誤,確定'document.cookie'爲空(已編輯)。是的,這是相同的域一切都在'http:// localhost:8000 /' – Mira
@Mira在稍後的請求中cookie可用服務器端 - [''req.cookies.token'](http://expressjs.com/ EN/4X/api.html#req.cookies)?在值之後的'Set-Cookie'頭文件中還提供了哪些其他選項? –