问题描述
我在 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}))
})