昨天用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())
成功解决问题!