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

Postman发送form-data失败,Sequelize返回value cannot be null错误

问题解决:form-data请求时Sequelize报value cannot be null

核心问题1:中间件顺序错误

你的express-fileupload中间件挂载在路由之后,导致路由处理请求时,form-data还未被解析,req.body是空对象,从req.body解构的brandId、typeId等字段全为undefined,传给Sequelize创建模型时触发非空校验错误。

修正后的index.ts:
将fileUpload中间件移到路由挂载之前:

import express from "express";
import fileUpload from "express-fileupload"
// ...其他导入代码

const app = express()
const PORT = process.env.PORT || 5100

app.use(cors())
app.use(express.json())
// 先挂载文件解析中间件,再处理路由
app.use(fileUpload({}))
app.use('/api', router)
app.use(errorHandler)

const start = async () => {
    try {
        await sequelize.authenticate()
        await sequelize.sync()
        console.log(chalk.cyanBright('Successful conection to data base'));
        app.listen(PORT, () => { console.log(chalk.cyanBright(`Server has been started on port ${PORT}`)) })
    }
    catch (e) {
        console.log(e);
    }
}
start()

核心问题2:UUID生成写法错误

控制器里的filename把uuid.v4()写成了字符串字面量,不会生成实际UUID,需要调用函数生成:

// 先确保导入uuid包
import { v4 as uuidv4 } from 'uuid';

// 修正文件名生成逻辑
let filename = uuidv4() + '.jpg'

额外注意事项

  • 检查Sequelize模型中brandId、typeId、name、price字段的allowNull配置,如果是false,必须确保Postman的form-data里确实传了这些字段,且键名与代码解构的完全一致(大小写敏感)。
  • 增加文件存在校验,避免空文件导致的错误:
if (!img) {
    return next(ApiError.badRequest('请上传图片'))
}
img.mv(path.resolve(__dirname, '..', 'static', filename))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:48:22