Как сопоставить req.body с запросом на обновление?

Содержимое POST req.body является динамическим (неотмеченные флажки не отправляются). Запросы SQL на обновление и вставку жестко запрограммированы, хотя и содержат заполнители. Либо мне нужно дополнить req.body, чтобы он соответствовал моему жестко закодированному запросу, либо динамически создать запрос из req.body:

<script>
let sql = "UPDATE table SET ";
let data = {};
for (let [key, value] of Object.entries(req.body)) {
    if (key != 'id' && key != 'submit') {
        sql += "$" + key + "=? ,";
    }
}
sql += " WHERE $id = " + req.body.id;

for (let [key, value] of Object.entries(req.body)) {
    if (key != 'id' && key != 'submit') {
        let newKey = "$" + key;
        data.newKey = value;
    }

}
</script>

Что лучше: перестроить мои данные в соответствии с запросом или создать запрос в соответствии с моими данными?

🤔 А знаете ли вы, что...
JavaScript может выполняться как на стороне клиента (в браузере), так и на стороне сервера (с использованием Node.js).


57
1

Ответ:

Решено

Вы можете установить построитель запросов.

  1. Установить
npm install express knex sqlite3
  1. Применять
const express = require('express');
const knex = require('knex');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

const db = knex({
  client: 'sqlite3',
  connection: {
    filename: './data.sqlite3'
  },
  useNullAsDefault: true
});

app.put('/update', (req, res) => {
  const data = req.body;
  const id = data.id;
  delete data.id;
  delete data.submit;

  db('table')
    .where('id', id)
    .update(data)
    .then(() => {
      res.status(200).json({ message: 'Successful!' });
    })
    .catch(error => {
      res.status(500).json({ message: 'Failed', error });
    });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.info(`Server running on ${PORT}`);
});