NodeJS:验证sql查询是否成功

问题描述

我在 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',CodProduto)
            .input('input_parameter3',sql.Numeric,Qtde)
            .input('input_parameter4',ValorUnitario)
            .input('input_parameter5',CodFuncionario)
            .input('input_parameter6',Sub)
            .input('input_parameter7',sql.Char,Tipo)
            .input('input_parameter8',sql.VarChar,Operador)
            .input('input_parameter9',valorantigo)
            .input('input_parameter10',Custounit)
            .query("INSERT INTO OSProduto (CodoS,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,对吗?

Here 您可以查看查询结果的文档。

例如,您可以使用 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',CodProduto)
            .input('input_parameter3',sql.Numeric,Qtde)
            .input('input_parameter4',ValorUnitario)
            .input('input_parameter5',CodFuncionario)
            .input('input_parameter6',Sub)
            .input('input_parameter7',sql.Char,Tipo)
            .input('input_parameter8',sql.VarChar,Operador)
            .input('input_parameter9',valorantigo)
            .input('input_parameter10',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}))
})