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

使用app.post向MySQL数据库插入数据失败的求助

问题排查与解决

核心问题分析

你遇到的问题主要有两个关键点:

  1. 请求方法不匹配:浏览器直接访问localhost:8800/shoes是发送GET请求,只会触发app.get("/shoes")接口,不会执行POST接口的插入逻辑。教程中“保存JS后数据立即上传”应该是用了Postman、curl这类工具发送POST请求,或是教程里的插入逻辑直接写在代码中执行(而非通过接口触发)。
  2. SQL参数传递错误:POST接口中数据库查询的参数传递有误,会导致SQL执行失败。

分步骤解决

1. 修正SQL参数传递

你的POST接口中,db.query的第二个参数传了[values],但values本身已经是一个数组,传递二维数组会导致SQL占位符匹配失败。修改如下:

app.post("/shoes", (req, res) => {
    const q = "INSERT INTO `marketplace`.`shoes` (`id`, `prod_name`, `prod_description`, `image`) VALUES(?)";
    const values = [
        "222",
        "item3",
        "item 3 description",
        "item3 image"
    ];

    // 将[values]改为values
    db.query(q, values, (err, data) => {
        if(err) return res.json(err);
        return res.json("数据插入成功");
    });
});

2. 正确触发POST接口

浏览器地址栏只能发送GET请求,要触发POST接口,你需要用以下方式:

  • 使用Postman:新建POST请求,地址填http://localhost:8800/shoes,直接发送即可触发插入逻辑。
  • 使用curl命令:在终端执行:
    curl -X POST http://localhost:8800/shoes
    
  • 添加前端请求:如果配合前端页面,需要写一个method="POST"的表单,或是用fetch/axios发送POST请求。

3. 可选:添加请求体解析(后续接收前端数据用)

如果以后需要从前端接收数据插入数据库,需要在代码开头添加请求体解析中间件,否则无法获取req.body:

import express from "express";
import mysql from "mysql";

const app = express();
// 添加这一行解析JSON格式的请求体
app.use(express.json());

// 后续代码不变...

4. 验证数据库连接

可以添加数据库连接错误监听,确保连接正常:

const db = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "qwerty",
    database: "marketplace"
});

db.connect((err) => {
    if (err) {
        console.error("数据库连接失败:", err);
        return;
    }
    console.log("已连接到数据库");
});

测试验证

  1. 启动服务,确保控制台输出connected to backend和已连接到数据库。
  2. 用Postman或curl发送POST请求到http://localhost:8800/shoes。
  3. 发送GET请求到http://localhost:8800/shoes,查看返回数据是否包含新插入的item3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:17