node axios cookie填坑

时间:2022-03-04 18:10:01

昨天用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_nodenode_modulescookiesindex.js:126:11)
at Cookies.set (D:webMyProjectssecuritysecurity_nodenode_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())

成功解决问题!