我正在建立一個系統,該系統將查詢 MySQL 資料庫以注冊和洗掉員工等。我只是想知道是否需要在 try catch 塊中進行查詢,或者它是否只是多余的。我在下面有一個例子。我的理解是,這會引發錯誤,但不會使系統崩潰,因為它會像 try/catch 那樣捕獲錯誤并讓服務器保持正常運行。
var con = mysql.createConnection({
host: 'mysql1',
user: 'root',
database: 'assignment',
password: 'admin'
});
let sqlQuery = `INSERT INTO CBOdb (staffName, staffID, staffPassword, time) VALUES ('${staffName}', '${staffID}', '${staffPassword}', NOW())`;
try {
con.query(sqlQuery, function(err, result) {
if (err) {
throw err;
} else {
res.send(0)
}
})
} catch {
res.send(1) //"**Error ecounterd, staff not registerd**\nPlease contact system Administrator.")
}
uj5u.com熱心網友回復:
這個 Node.js MySQL 查詢中的 Try/Catch 是冗余的嗎?
是的,這是不必要的。來自查詢的錯誤不會通過您可以捕獲的同步例外進行回傳try/catch。它們通過err回呼的引數傳回。
正如評論中提到的,nodejs 有幾個不同版本的 mysql 模塊。您正在使用基于普通回呼的原始版本。還有另一個版本的名為mysql2的模塊支持 promises,這為您提供了一些更現代的方法來呼叫 mysql 和使用 promisesawait和try/catch.
這是await使用 mysql2/promise 介面使用 try/catch 來使用和捕獲錯誤的示例。
const mysql = require('mysql2/promise');
app.get("/somePath", async (req, res) => {
// this needs to be inside an async function so you can use await
const con = await mysql.createConnection({ ... });
let sqlQuery = `INSERT INTO CBOdb (staffName, staffID, staffPassword, time) VALUES ('${staffName}', '${staffID}', '${staffPassword}', NOW())`;
try {
const result = await con.query(sqlQuery);
res.send(0)
} catch(e) {
console.log(e);
res.send(1); //"**Error ecounterd, staff not registerd**\nPlease contact system Administrator.")
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/362021.html
標籤:javascript mysql 节点.js 数据库 试着抓
上一篇:當關鍵字字面上是async時,為什么我們必須使用關鍵字async和await使其在節點中同步?
下一篇:Node.JS:由于node-sass和node-gyp,嘗試使用docker-composeup退出運行docker專案
