码迷,mamicode.com
首页 > 移动开发 > 详细

node+axios+cookie填坑

时间:2020-01-26 10:19:13      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:content   out   max   测试   meta   param   val   default   account   

昨天用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:\web\MyProjects\security\security_node\node_modules\cookies\index.js:126:11)
at Cookies.set (D:\web\MyProjects\security\security_node\node_modules\cookies\index.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填坑

标签:content   out   max   测试   meta   param   val   default   account   

原文地址:https://www.cnblogs.com/zhoulixiangblog/p/12232660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!