Я работаю над REST API, созданным с помощью Express JS.Впервые действительно использую это, но очень взволнован возможностями.Пока у меня есть несколько GET
маршрутов, некоторые из которых возвращают все записи, а некоторые возвращают конкретные.Ответ, возвращаемый как JSON, выглядит следующим образом:
{
"status": 200,
"record_count": 1,
"error": null,
"response": [
{
"id": 1,
"recID": "2BC040-1537991865",
"type": "Production",
"margin": "50"
}
]
}
У меня также есть маршрут PUT
, который обновляет мою запись, и маршрут POST
, который вставляет (оба используют req.body.field
для обновления и вставки),Я хотел бы проверить record_count
(или строки, возвращенные из запроса sql), чтобы увидеть, существует ли запись, если нет, я хочу POST
вместо PUT
.
Что является правильнымспособ сделать это?Я думал о вызове запроса GET
и проверке значения record_count
в моем ответе, и если оно равно 0, тогда вызову мой запрос POST
, в противном случае просто используйте PUT
.Не уверен, что лучший способ сделать это.Вот мой PUT
маршрут:
router.put('/editablerecords/update', function (req, res) {
let qb_TxnID = req.body.recID
let type = req.body.type;
let margin = req.body.margin;
if (!qb_TxnID) {
return res.status(400).send({ error:true, message: 'Please provide TxnID' });
}
connection.query("UPDATE QuoteToClose SET ? WHERE TxnID = '" + qb_TxnID + "'", { type, margin }, function (error, results, fields) {
if(error){
res.send(JSON.stringify({"status": 500, "error": error, "response": null }));
//If there is error, we send the error in the error section with 500 status
} else {
res.send(JSON.stringify({ error: false, data: results, message: 'Record updated.' }));
//If there is no error, all is good and response is 200OK.
}
});
});
Хорошая идея сделать оператор if
, попробуйте запустить мой connection.query
с оператором SELECT
, и если record_count
равно 0, затем сделать POST
, в противном случае сделать PUT
?Я не уверен в этом.Все мои маршруты (для этой конкретной таблицы базы данных) находятся в одном файле.
РЕДАКТИРОВАТЬ: я создал новый маршрут для PUT, который сначала проверяет записи, а затем соответствующим образом корректирует маршрут.Это кажется громоздким, хотя.Есть ли более эффективный способ?
router.put('/editablerecords/update', function (req, res) {
let qb_TxnID = req.body.txnid
let type = req.body.type;
let margin = req.body.margin;
if (!qb_TxnID) {
return res.status(400).send({ error:true, message: 'Please provide TxnID' });
}
connection.query('SELECT id, qb_TxnID, type, margin from QuoteToClose where qb_TxnID = ?', estimate_id, function( error, results, fields ) {
if(error){
res.send(JSON.stringify({"status": 500, "error": error, "response": null}));
//If there is error, we send the error in the error section with 500 status
} else {
if (results.length = 0) {
//INSERT
connection.query("INSERT INTO QuoteToClose SET ? ", { 'qb_TxnID': qb_TxnID, 'type': type, 'margin': margin }, function (error, results, fields) {
if(error){
res.send(JSON.stringify({"status": 500, "error": error, "response": null}));
//If there is error, we send the error in the error section with 500 status
} else {
res.send(JSON.stringify({ error: false, data: results, message: 'New record has been created successfully.' }));
//If there is no error, all is good and response is 200OK.
}
});
} else {
//UPDATE
connection.query("UPDATE QuoteToClose SET ? WHERE qb_TxnID = '" + qb_TxnID + "'", { type, margin }, function (error, results, fields) {
if(error){
res.send(JSON.stringify({"status": 500, "error": error, "response": null }));
//If there is error, we send the error in the error section with 500 status
} else {
res.send(JSON.stringify({ error: false, data: results, message: 'Record updated.' }));
//If there is no error, all is good and response is 200OK.
}
});
}
// res.send(JSON.stringify({"status": 200, "record_count": results.length, "error": null, "response": results}));
//If there is no error, all is good and response is 200OK.
}
});