node+axios+cookie填坑

Posted zhoulixiangblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node+axios+cookie填坑相关的知识,希望对你有一定的参考价值。

昨天用node写后端接口,前端axios请求,遇到好多坑,总结一下:

1.axios传参异常

this.axios.post(this.$route.meta.api.login, {
     account: this.form.account,
     password: this.form.password
})

一开始使用这届对象传参的方式,发现后台接受到的参数为空对象,上网查了一下,说是需要添加axios.defaults.headers.post[‘Content-Type‘] = ‘application/x-www-form-urlencoded;charset=UTF-8‘
于是在全局中添加了上面代码,发现还是没用。最终通过如下方式解决:

let formData = new URLSearchParams()
formData.append('account', this.form.account)
formData.append('password', this.form.password)
this.axios.post(this.$route.meta.api.login, formData)

2.cookie无法存储中文

我用cookie保存用户信息,代码如下:

req.cookies.set('userInfo', JSON.stringify({
    username: results[0].username,
    pid: results[0].pid
}), { maxAge: 10 * 60 * 1000 })

然后发现如下报错:

TypeError: argument value is invalid
at new Cookie (D:webMyProjectssecuritysecurity_node
ode_modulescookiesindex.js:126:11)
at Cookies.set (D:webMyProjectssecuritysecurity_node
ode_modulescookiesindex.js:88:16)

一开始我以为是存储的格式不正确,但后来看了下没问题,突然想起会不会是中文字符的问题,于是我试了下如下代码:

req.cookies.set('userInfo', '测试', { maxAge: 10 * 60 * 1000 })

发下还是回报同样的错误,把‘测试‘换成‘test‘就不报错了。
所以我用base64编码来存储信息:

req.cookies.set('userInfo', Buffer.from(JSON.stringify({
    username: results[0].username,
    pid: results[0].pid
})).toString('base64'), { maxAge: 10 * 60 * 1000 })

返回的时候再做一下转换:

userInfo = JSON.parse(Buffer.from(req.userInfo, 'base64').toString())

成功解决问题!

以上是关于node+axios+cookie填坑的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node、Express、Axios 在 ReactJS 前端设置带有 JWT 令牌的 cookie

vue填坑 让axios发送表单形式数据

如何在 Cookie 上指定 SameSite 和 Secure(使用 axios/React/Node Express)

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装