NextJs Pages路由中getServerSideProps获取Cookie遇TS2722错误
问题原因
你遇到的TS错误TS2722: Cannot invoke an object which is possibly 'undefined',核心原因是Pages路由里的req.cookies并没有get方法:
- 从类型定义能看到,
NextApiRequestCookies是Partial<{[key: string]: string}>,本质是一个可选的键值对对象,不存在get这个方法。 - 你可能混淆了Pages Router和App Router的Cookie用法——
get方法是App Router(app/目录)中RequestCookies类型才有的API,Pages Router并不支持。
正确解决方案
1. 直接通过属性访问(已验证可行)
直接用键名访问即可,注意因为是Partial类型,Cookie可能不存在,建议添加兜底处理:
export const getServerSideProps: GetServerSideProps = async (context) => { const { req } = context; // 可选链+默认值,避免undefined问题 const cookieA = req.cookies.A ?? '默认值'; // 或者先判断存在性再处理 if (req.cookies.A) { // 处理Cookie存在的逻辑 } return { props: {} }; };
2. 封装自定义get方法(可选)
如果习惯用get的调用方式,可以自己封装一个工具函数:
import type { NextApiRequestCookies } from 'next/dist/server/api-utils'; const getCookie = (cookies: NextApiRequestCookies, key: string): string | undefined => { return cookies[key]; }; export const getServerSideProps: GetServerSideProps = async (context) => { const { req } = context; const cookieA = getCookie(req.cookies, 'A'); return { props: {} }; };
内容的提问来源于stack exchange,提问作者andreivictor
相关产品推荐
相关产品推荐

