Express JS rest api - POST'ing вместо PUT'ing, когда значение еще не существует - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над 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.
        }
    });
...