首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSR API cookie集/删除

SSR API cookie集/删除
EN

Stack Overflow用户
提问于 2020-02-16 21:21:19
回答 1查看 2.2K关注 0票数 1

我可以在getInitialProps中通过ssr传递cookie

代码语言:javascript
复制
req?.headers?.cookie

我可以在api路由中读取它们,如果请求不是ssr,我也可以使用

res.setHeader('Set-Cookie', ...)

但是,如果请求来自API解析器中的getInitialProps (SSR),如何设置/删除它们?

代码语言:javascript
复制
// Api handler
const handler = async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {
  console.log(req.headers.cookie) // works on ssr/client

  res.setHeader('Set-Cookie', ['testSSR2=2; path=/; expires=Thu, 01 Jan 2021 00:00:01 GMT;']) // works on client request only

  res.json({ data: 'test' })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-16 22:33:30

好吧,这似乎是可行的:

如果fetch请求是由服务器发出的,那么我们就克隆(使用一些解析)“Set-Cookie”头到res头。

代码语言:javascript
复制
import fetch from 'isomorphic-unfetch'
import { IncomingMessage, ServerResponse } from 'http'

const payload = (body: any, cookies?: any): object => {
  const headers = {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    cookie: cookies || ''
  }

  return {
    method: 'POST',
    headers,
    credentials: 'same-origin',
    body: JSON.stringify(body)
  }
}

type ApiRes<ExpectedData> = Partial<{ data: ExpectedData }>
type AnyObj = { [key: string]: any }

const fetchAPI = <Body = AnyObj, ExpectedData = AnyObj>(
  apiAction: string,
  body: Body,
  req?: IncomingMessage,
  res?: ServerResponse
): Promise<ApiRes<ExpectedData>> => {
  return new Promise((resolve) => {
    fetch(`mysite/api/some`, payload(body, req?.headers?.cookie))
      .then((raw) => {
        if (req && res) {
          const setCookies = raw.headers.get('Set-Cookie')

          if (setCookies !== null) {
            res.setHeader('Set-Cookie', setCookies.split(';, '))
          }
        }

        return raw.json()
      })
      .then((parsed: ApiRes<ExpectedData>) => resolve(parsed))
      .catch((err) => {
        console.log(err)
      })
  })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60253342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档