Как вернуть идентификатор, когда новая запись записывается с помощью триггера express js и MYSQL

#javascript #mysql #node.js #express

Вопрос:

В настоящее время я использую express и workbench для настройки базы данных, в которой я могу создавать, просматривать и обновлять автомобили.

Прямо сейчас, когда я публикую новый автомобиль, он создает новую запись с указанием производителя, модели и цены, и я использую триггер, который я использовал внутри верстака, чтобы настроить UUID для каждого транспортного средства. Однако я хочу иметь возможность возвращать этот новый UUID при создании новой записи в моей функции app.post.

Вот моя почтовая функция:

 //Allow post methods 
app.post('/cars', (req, res) => {
    if (req.query.manufacturer amp;amp; req.query.model amp;amp; req.query.price) {
        console.log('Request received'); //logging to check if post request has beeen made 

        connection.connect(function(err) { //query the connection then call an SQL INSERT method to put new record in database. 
            connection.query(`INSERT INTO main.cars (manufacturer, model, price) VALUES ('${req.query.manufacturer}', '${req.query.model}', '${req.query.price}')`, function(err, result, fields) {
                if (err) res.send(err);
                if (result) res.send({manufacturer: req.query.manufacturer, model: req.query.model, price: req.query.price}); //sending the fields to the response (res)
                if (fields) console.log(fields);
                console.log(result)
            });
        });
    } else {
        console.log('Missing a parameter');
    }
});
 

Прямо сейчас он просто возвращает новые поля, введенные в postman, но не новый uuid (идентификатор), и я совершенно не уверен, как это сделать, так как он создается в триггере в workbench:

 CREATE DEFINER=`admin`@`%` TRIGGER `cars_BEFORE_INSERT` 
    BEFORE INSERT ON `cars` FOR EACH ROW BEGIN
        SET new.id = uuid();
    END
 

Комментарии:

1. У вас также есть столбец автоматического увеличения в таблице?

2. Я так не считаю, так как нет необходимости в автоматическом приращении, так как UUID генерируется случайным образом в качестве первичного ключа.

3. Это облегчило бы поиск только что вставленной строки, так как вы могли бы использовать result.insertId .

Ответ №1:

Запросите таблицу, чтобы получить id данные, присвоенные только что вставленному производителю/модели.

Кроме того, используйте запрос базы данных с параметрами, а не подставляйте параметры запроса непосредственно в SQL, чтобы защитить от внедрения SQL.

 connection.connect(function(err) { //query the connection then call an SQL INSERT method to put new record in database. 
  connection.query('INSERT INTO main.cars (manufacturer, model, price) VALUES (?, ?, ?)', [req.query.manufacturer, req.query.model, req.query.price], function(err, result, fields) {
    if (err) {
      res.send(err);
    } else {
      connection.query('SELECT id FROM main.cars WHERE manufacturer = ? AND model = ?', [req.query.manufacturer, req.query.model], function(err, result) {
        if (err) {
          res.send(err);
        } else {
          res.send({
            manufacturer: req.query.manufacturer,
            model: req.query.model,
            price: req.query.price,
            id: result[0].id
          });
        }
      });
    }
  });
});