簡體   English   中英

NodeJS:驗證 sql 查詢是否成功

[英]NodeJS: Verify if sql query was successful

我在 nodejs 中制作了一個非常簡單的 api 以將我的 flutter 應用程序與 sqlserver 數據庫一起使用,我有疑問。

如果查詢成功返回不同的結果,我該如何進行驗證?

我正在嘗試在成功插入后進行更新,但我不知道如何檢查它,有人可以幫助我嗎?

這是 api 代碼部分:

router.route("/addProduto").post((request, response) => {
    CodOS = request.body.CodOs;
    CodProduto = request.body.CodProduto;
    Qtde = request.body.Qtde;
    ValorUnitario = request.body.ValorUnitario;
    CodFuncionario = request.body.CodFuncionario;
    Sub = request.body.Sub;
    Tipo = request.body.Tipo;
    Operador = request.body.Operador;
    valorantigo = request.body.valorantigo;
    Custounit = request.body.Custounit;

    dboperations.addProduto(CodOS, CodProduto, Qtde, ValorUnitario, CodFuncionario, Sub, Tipo, Operador, valorantigo, Custounit).then(result => {


        console.log(result); 


        if (result === undefined) {
             response.json("ERROR");
         }
         else { 

        }
    })

})

如您所見,我檢查結果是否未定義,但我想這不是最好的方法。

所以這里是查詢代碼部分:

async function addProduto() {
    try {
        let pool = await sql.connect(config);
        let addProduto = await pool.request()
            .input('input_parameter1', sql.Int, CodOS)
            .input('input_parameter2', sql.Int, CodProduto)
            .input('input_parameter3', sql.Numeric, Qtde)
            .input('input_parameter4', sql.Numeric, ValorUnitario)
            .input('input_parameter5', sql.Int, CodFuncionario)
            .input('input_parameter6', sql.Numeric, Sub)
            .input('input_parameter7', sql.Char, Tipo)
            .input('input_parameter8', sql.VarChar, Operador)
            .input('input_parameter9', sql.Numeric, valorantigo)
            .input('input_parameter10', sql.Numeric, Custounit)
            .query("INSERT INTO OSProduto (CodOS ,CodProduto ,Qtde ,ValorUnitario ,CodFuncionario ,Sub ,Tipo ,Operador ,valorantigo ,Custounit) VALUES ( @input_parameter1, @input_parameter2, @input_parameter3, @input_parameter4, @input_parameter5, @input_parameter6, @input_parameter7, @input_parameter8, @input_parameter9, @input_parameter10)")
        
        return addProduto.recordsets;
    }
    catch (error) {
        console.log(error);
    }
}

您正在使用 node-mssql,對嗎?

在這里您可以查看查詢結果的文檔。

例如,您可以使用rowsAffected參數檢查插入是否成功:

async function addProduto() {
    try {
        const pool = await sql.connect(config);
        const addProduto = await pool.request()
            .input('input_parameter1', sql.Int, CodOS)
            .input('input_parameter2', sql.Int, CodProduto)
            .input('input_parameter3', sql.Numeric, Qtde)
            .input('input_parameter4', sql.Numeric, ValorUnitario)
            .input('input_parameter5', sql.Int, CodFuncionario)
            .input('input_parameter6', sql.Numeric, Sub)
            .input('input_parameter7', sql.Char, Tipo)
            .input('input_parameter8', sql.VarChar, Operador)
            .input('input_parameter9', sql.Numeric, valorantigo)
            .input('input_parameter10', sql.Numeric, Custounit)
            .query("INSERT INTO OSProduto (CodOS ,CodProduto ,Qtde ,ValorUnitario ,CodFuncionario ,Sub ,Tipo ,Operador ,valorantigo ,Custounit) VALUES ( @input_parameter1, @input_parameter2, @input_parameter3, @input_parameter4, @input_parameter5, @input_parameter6, @input_parameter7, @input_parameter8, @input_parameter9, @input_parameter10)")
        if (addProduto.rowsAffected == 0){
            throw 'Nothing was inserted!';
        }
        return addProduto.recordsets;
    } catch (error) {
        console.log(error);
        throw error; // catch error on level above
    }
}

例如,您可以通過 Promise catch捕獲錯誤:

router.route("/addProduto").post((request, response) => {
    dboperations.addProduto(request.body)
        .then(result => {
            console.log(result); 
            response.json("Ok!");
        })
        .catch(error => response.json({error}))
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM