You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:22:39