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

Vue.js中使用FormData.append传递布尔值时数据库始终收false的问题

问题排查与解决

1. 核心拼写错误

后端API代码存在字段名拼写错误:前端传递的字段是availability,但后端写成了avaliability(正确拼写应为availability)。这会导致req.body.avaliability始终为undefined,数据库字段因默认值为false,最终存入的结果始终是false。

修复后的API代码:

product.availability = req.body.availability

2. 表单输入类型缺失

模板中的<input>未指定type="checkbox",默认类型为text,无法通过v-model正确绑定布尔值实现复选框的切换逻辑。即便控制台打印this.availability为true,也可能是异常逻辑导致,必须明确指定输入类型。

修复后的模板代码:

<input
  type="checkbox"
  v-model="availability"
/>

3. FormData传递布尔值的类型转换问题

使用FormData.append()时,布尔值会被自动转为字符串("true"或"false")。若后端直接将该字符串赋值给布尔类型的数据库字段,部分数据库或ORM不会自动完成类型转换,导致最终存入false(字符串"true"与布尔true不相等)。

两种解决方式:

方式一:前端转数值后传递

async handleSubmit() {
  const formData = new FormData();
  // 将布尔值转为1/0,后端接收后再转回布尔
  formData.append("availability", this.availability ? 1 : 0);
}

后端对应处理:

product.availability = req.body.availability === 1;

方式二:改用JSON格式发送(推荐)

若无需上传文件,直接用JSON格式发送数据,避免类型转换问题:

async handleSubmit() {
  await fetch('/你的API地址', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      availability: this.availability
    })
  });
}

这种方式后端可直接接收布尔值,无需额外转换。


内容的提问来源于stack exchange,提问作者jibzy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:22:43