【问题标题】:Body not correct for MySQL INSERT for POST MethodMySQL INSERT for POST 方法的正文不正确
【发布时间】:2019-10-02 06:46:07
【问题描述】:

我所有的方法,如 SELECT 等都可以,我可以在 Postman 中检索我的数据。

但是,我在我的数据库中添加数据的方法 INSERT INTO 在 Postman 中不起作用。身体似乎不正确。

这是我尝试用 Postman 发送的正文:

{
    "id": 2000,
    "code": 4,
    "alpha2": "AF",
    "alpha3": "AFG",
    "name_en": "Afghanistan",
    "name_fr": "Afghanistan"
}

这是 node.js 中的代码:

app.post('/country', function (req, res) {

    let country = req.body.country;

    if (!country) {
        return res.status(400).send({ error:true, message: 'Please provide country' });
    }

    mc.query("INSERT INTO country SET ? ", { country: country }, function (error, results, fields) {
        if (error) throw error;
        return res.send({ error: false, data: results, message: 'New country has been created successfully.' });
    });
});

这是我在 Postman 中得到的回复:

{
    "error": true,
    "message": "Please provide country"
}

这是我的 SQL 数据库:

【问题讨论】:

    标签: mysql node.js api postman


    【解决方案1】:

    假设您正在使用 body-parser 包并已正确加载它,

    const bodyParser = require("body-parser);
    app.use(bodyParser.json())
    

    那么,您的有效载荷不正确。

    您需要在对象的根目录中有country 键 -

    {
     "country": {
        "id": 2000,
        "code": 4,
        "alpha2": "AF",
        "alpha3": "AFG",
        "name_en": "Afghanistan",
        "name_fr": "Afghanistan"
     }
    }
    

    您当前的代码正在寻找不存在的req.body.country。如果你执行req.body.alpha3,你就会明白我的意思了。

    -- 编辑:

    您的 SQL 也有问题。

    1. 插入语句应为 `INSERT into Country VALUES(?,?,?), [...parameters]
    2. 不应在 Insert 语句中使用 SET 关键字。

    --

    编辑 2:

    根据 mysql 包文档,您应该按如下方式构造查询 -

    mc.query("INSERT INTO country SET ? ", country, function (error, results, fields) {....
    

    不要将 country 包装在另一个对象中,假设您创建了我之前描述的对象,并且 country 存在于根中。否则,只需按原样传递 req.body(当然,您应该转义查询)。

    【讨论】:

    • 是的,当然我已经尝试过了。然后我在控制台中遇到错误:“ER_BAD_FIELD_ERROR”:字段列表中的字段“国家”未知。
    • 您的 SQL 也有问题。如果我们可以提供进一步帮助,您需要使用表格详细信息更新您的问题。另请参阅更新的答案。
    • 它有效,但是如果我不想将关键国家精确到我的根目录中,我应该如何构建我的查询?
    • 按原样传递 req.body 。您现有的键应与表列匹配。并在执行查询之前验证和转义正文
    • 非常感谢!
    【解决方案2】:

    let country = req.body.country; 您正在 req.body 中寻找您没有的“国家”值。

    尝试将其添加到正文中

    {
       "id": 2000,
       "code": 4,
       "alpha2": "AF",
       "alpha3": "AFG",
       "name_en": "Afghanistan",
       "name_fr": "Afghanistan"
       "country": "sample country"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多