Postgres数组格式错误排查:前端POST触发QueryFailedError
以下是可能导致QueryFailedError: malformed array literal: "checkin,checkout"错误的原因:
前端请求格式或序列化异常
虽然你看到的负载是标准JSON数组,但实际发送请求时,可能未设置Content-Type: application/json,或者前端框架在序列化数组时出了问题。比如如果用application/x-www-form-urlencoded格式发送请求,数组会被自动转成逗号拼接的字符串"checkin,checkout";而TypeORM的simple-array字段需要接收数组类型参数(它会自动把数组转成逗号分隔的字符串存入数据库),直接传字符串会被当成数组的单个元素,触发SQL语法错误。后端Body解析中间件配置问题
比如在Express项目中,如果未启用express.json()中间件,或者中间件的解析选项有误(比如未开启JSON解析、限制了payload大小),后端无法正确解析JSON请求体,会把actions字段解析成字符串类型。此时TypeORM接收到的是字符串而非数组,插入时会生成不符合PostgreSQL数组语法的SQL语句,导致报错。前端数据预处理错误
前端代码可能在发送请求前对数据做了额外处理,比如手动把数组转成了逗号分隔的字符串。比如某些表单提交库、自定义的数据转换逻辑,都可能导致实际发送的actions是字符串而非数组。
验证方法
在后端的create接口里先打印接收到的请求体(比如console.log(req.body.actions)),查看actions的类型是数组还是字符串,就能快速定位问题源头。
内容的提问来源于stack exchange,提问作者LoweloDev

