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

Sequelize+Node.js中Model.create()无法向MySQL保存数据求助

问题描述

使用MySQL、Express.js和Sequelize搭建数据库,模型已创建完成,但调用Model.create()写入数据时无预期效果:

  • 页面持续加载无响应
  • 控制器中console.log(req.body)无输出
  • 无任何报错信息
  • 已确认路由注册正常,怀疑模型或请求处理存在问题

相关代码

Database.js

const { Sequelize } = require("sequelize");
const sequelize = new Sequelize("node-compelet", "root", "********", {
  dialect: "mysql",
  host: "localhost",
});
module.exports = sequelize;

模型文件 product.js

const sequelize = require("../util/database");
const { Sequelize, DataTypes } = require("sequelize");

const Product = sequelize.define("Product", {
  id: {
    type: DataTypes.INTEGER,
    autoIncrement: true,
    allowNull: false,
    primaryKey: true,
  },
  title: { type: DataTypes.STRING },
  price: { type: DataTypes.DOUBLE, allowNull: false },
  imgUrl: { type: DataTypes.STRING, allowNull: false },
  description: { type: DataTypes.STRING, allowNull: false },
});
module.exports = Product;

控制器代码

const Product = require("../models/product")
exports.postAddProduct = (req, res, next) => {
  const title = req.body.title;
  const imgUrl = req.body.imgUrl;
  const price = req.body.price;
  const description = req.body.description;
  console.log(req.body);
  Product.create({
    title: title,
    price: price,
    imgUrl: imgUrl,
    description: description,
  })
    .then((result) => {
      console.log("result");
      res.redirect("/");
    })
    .catch((err) => console.log(err));
};

app.js代码

const sequelize = require("./util/database");
const Product = require("../models/product")
sequelize
  .sync({ force: true })
  .then((result) => {
    app.listen(3000);
    console.log("synced secceed");
  })
  .catch((err) => {
    console.log(err);
    console.log("faild");
  });

解决方法

1. 修复请求体解析问题

req.body为空是核心原因——Express默认不解析请求体,需在app.js中添加解析中间件:

// 在app.js顶部补充
const express = require('express');
const app = express();

// 添加请求体解析
app.use(express.urlencoded({ extended: true })); // 解析表单格式请求
app.use(express.json()); // 解析JSON格式请求

缺失解析中间件会导致req.body为空,后续Product.create因必填字段缺失陷入等待,最终造成页面挂起。

2. 检查模型引入路径

app.js中引入Product的路径../models/product需匹配项目目录结构:

  • 若app.js在/src目录,models在/src/models,路径应改为./models/product,路径错误会导致模型未加载,create方法无法执行。

3. 完善错误处理逻辑

在控制器的catch块中添加响应结束逻辑,避免请求挂起:

.catch((err) => {
  console.log(err);
  res.status(500).send("数据创建失败"); // 主动结束请求并返回错误信息
});

4. 验证数据库连接

在Database.js末尾添加连接测试,确认数据库连接正常:

sequelize.authenticate()
  .then(() => console.log("数据库连接成功"))
  .catch(err => console.log("数据库连接失败:", err));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:22:42