Vue.js向数据库传布尔值失败:请求返回未授权错误
问题原因与解决方案
核心问题出在FormData的类型转换上:当你用FormData.append()添加布尔值true时,它会被自动转换成字符串"true",而后端接口期望的是原生布尔类型true,这就导致权限校验不通过,返回未授权错误。
解决方案一:直接发送JSON数据(推荐,无需FormData)
既然Postman里发送JSON格式正常,Vue项目里直接用JSON格式请求即可,不需要用FormData(除非你需要上传文件)。修改代码如下:
async onAddCategory() { try { const response = await axios.post( "http://localhost:4000/api/categories", { type: this.type, isAdmin: this.isAdmin, description: this.description } ); console.log(response); } catch (err) { console.log(err); } },
Axios默认会把请求头设为Content-Type: application/json,和你Postman里的请求格式完全一致,这样布尔值就能正确传递。
解决方案二:如果必须用FormData(比如上传文件)
如果因为业务需求必须用FormData,就需要手动把布尔值序列化为JSON字符串,后端再解析成布尔类型:
async onAddCategory() { let data = new FormData(); data.append("type", this.type); // 把布尔值转成JSON字符串 data.append("isAdmin", JSON.stringify(this.isAdmin)); data.append("description", this.description); try { const response = await axios.post( "http://localhost:4000/api/categories", data ); console.log(response); } catch (err) { console.log(err); } },
后端需要对应处理isAdmin字段,比如在Node.js/Express里可以用JSON.parse(req.body.isAdmin)把字符串转回布尔值。
额外注意:原代码的语法错误
你提供的代码里,axios.post的第三个参数后面多了一个多余的},这会导致代码报错,记得删除这个语法错误。
内容的提问来源于stack exchange,提问作者jibzy
相关产品推荐
相关产品推荐

