#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
});
}
});
}
});
});