Express TypeScript中使用cookie-parser获取Cookie的方法
核心错误点
你的代码无法正常读取Cookie是因为注册cookie-parser中间件的写法错误:app.use()需要传入中间件执行后的函数实例,你直接传入了cookieParser本身,没有加括号调用,中间件根本没有生效。另外TypeScript项目下用require导入会丢失类型提示,也可能触发运行时导入异常。
正确配置步骤
- 先安装依赖和TS对应的类型声明包
npm i cookie-parser npm i -D @types/cookie-parser
- 正确导入、注册中间件,注意
cookieParser必须加括号调用,且注册位置要放在所有路由定义之前:
import express, { Request, Response } from 'express'; import cookieParser from 'cookie-parser'; const app = express(); // 正确注册:必须加()执行,返回中间件处理函数 app.use(cookieParser()); // 写入Cookie的路由示例 app.get('/set', (req: Request, res: Response) => { res.cookie('park', 'juhong', { httpOnly: true, maxAge: 24 * 60 * 60 * 1000 // 有效期1天 }); res.send('cookie written'); }) // 读取Cookie的路由 app.get('/', (req: Request, res: Response) => { // req.cookies 就是解析完成的键值对对象 console.log(req.cookies); res.send(`cookie value: ${req.cookies.park ?? 'empty'}`); }) app.listen(3000, () => { console.log('service start at 3000'); })
额外排查项
- 跨域场景下Cookie不生效:前端请求要开启
withCredentials: true配置,后端cors配置要设置credentials: true,且origin不能为通配符* - 如果写入Cookie时开启了
signed: true签名配置,对应值要从req.signedCookies字段读取,不要从req.cookies取 - 确认中间件注册顺序:
app.use(cookieParser())必须写在所有需要读取Cookie的路由前面,否则路由执行时Cookie还未被解析
内容的提问来源于stack exchange,提问作者JuHongPark
相关产品推荐
相关产品推荐

