Тело не подходит для MySQL INSERT для метода POST - PullRequest
0 голосов
/ 15 мая 2019

Все мои методы, такие как SELECT и т. Д., В порядке, я могу получить свои данные в Почтальоне.

Но мой метод INSERT INTO для добавления данных в мою базу данных не работает в 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.' });
    });
});

Вот ответ, который я получил в Почтальоне:

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

Вот моя база данных SQL:

enter image description here

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Если вы используете пакет 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 в Country VALUES (?,?,?), [... parameters]
  2. Вы не должны использовать ключевое слово SET в операторе Insert.

--

Редактировать 2:

Основываясь на документации пакета mysql, вы должны сконструировать запрос следующим образом -

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

Не переносите страну внутри другого объекта, предполагая, что высоздайте объект, как я описал ранее, со страной, присутствующей в корне.В противном случае просто передайте req.body как есть (конечно, вы должны избегать запросов).

0 голосов
/ 15 мая 2019

let country = req.body.country; вы ищете значение 'страна' в вашем реквизите, которого у вас нет.

попробуйте добавить его в тело

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