我有通过快递设置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'头文件中还提供了哪些其他选项? –