Не удается вставить json запись с помощью ax ios POST с node.js в базу данных postgresql? - PullRequest
1 голос
/ 11 апреля 2020

Я пробовал гуглить учебники / примеры, но ничего не могу найти. В настоящее время я могу вставить запись JSON в первый столбец, чтобы я знал, что все подключено, но JSON не разбивается на части и не помещается в соответствующие столбцы.

Это то, что я на моем клиенте выполняется вызов с POST

async function apiAddRecordToTable(record, table_name) {
   params = record;
   let res = await axios.post('http://localhost:3000/tables/addrecord/' + table_name, params);
   console.log('add record api called with selected tablename: ' + table_name);
   console.log(res.data);
}

Это то, что я называю с (просто для проверки)

apiAddRecordToTable({
   "user_id" : "110",
   "user_lon" : "64",
   "user_lat" : "-111",
}, 'user');

Что касается сервера, у меня есть

app.post('/tables/addrecord/user', db.addRecordUser);

и это вызывает в этой последней функции:

function addRecordUser(request, response) {
   console.log('into final add record user method');
   console.log(request);
   const rec = request.body;
   pool.query('INSERT INTO user_table VALUES ($1)', [rec], (error, results) => {
      if (error) {
         throw error
      }
      console.log(results);
      response.status(201).send('Row added')
   })
}

Окончательный результат в таблице выглядит так:

USER ID |  USER_LON | USER_LAT
{"user_id":"110","user_lon":"64","user_lat":"-111"}, <null>, <null>

Я понимаю, что, скорее всего, вставка всю запись из-за аргумента $ 1, но я пробовал так много вариантов и искал, как вставляется json, но не смог заставить его работать дальше этого. Как я могу сделать так, чтобы это выглядело как

USER ID |  USER_LON | USER_LAT
110, 64, -111

1 Ответ

1 голос
/ 11 апреля 2020

Вам нужно проанализировать body, чтобы получить анализ JSON с помощью метода JSON.pare().

И затем вы можете передать значения в Parameterized query. с использованием $1, $2, $3 заполнителей.

Пример:

function addRecordUser(request, response) {
    console.log('into final add record user method');
    console.log(request);
    const rec = JSON.parse(request.body);
    let query = 'INSERT INTO user_table VALUES ($1, $2, $3)';
    let values = [rec.user_id, rec.user_lon, rec.user_lat];
    pool.query(query, values, (error, results) => {
        if (error) {
            throw error
        }
        console.log(results);
        response.status(201).send('Row added')
    })
}
...