如何格式化 mysql 重复输入错误?
How to format a mysql duplicate entry error?
我正在使用 express.js 和 mysql2。
当插入时发生重复输入错误时,我在全局错误处理程序中收到错误并且按预期工作。
当我将其记录到控制台时,错误如下所示:
Error: Duplicate entry 'todd' for key 'users.username_UNIQUE'
at PromisePool.execute (C:\Users\YT\Desktop\PORTFOLIO\MERN\social-talk\server\node_modules\mysql2\promise.js:358:22)
at C:\Users\YT\Desktop\PORTFOLIO\MERN\social-talk\server\models\User.js:45:48 {
code: 'ER_DUP_ENTRY',
errno: 1062,
sqlState: '23000',
sqlMessage: "Duplicate entry 'todd' for key 'users.username_UNIQUE'"
}
我的问题是我不确定如何格式化这个错误,因为它没有给出重复的实际字段或键 (username),但只是这个 sqlMessage 字段,以这种格式向用户显示不是很好看。
PS:我知道 sequelize,但我真的很想知道如何在没有 ORM 的情况下做到这一点
其实我想出了一个不错的解决方案。
因为sqlMessage永远都是一样的格式,所以我先把sqlMessage拆分成一个数组,然后把输入的值提取出来,然后把字段也提取出来,但是由于字段的格式是"database.field_UNIQUE”,我不得不提取“。”之间的字段。和“_”字符。
代码如下所示:
if (err.errno === 1062) {
const errWords = err.sqlMessage.split(" ");
const entry = errWords[2];
const fieldDB = errWords[5];
const formattedField = fieldDB.substring(fieldDB.lastIndexOf(".") + 1, fieldDB.lastIndexOf("_"));
console.log( `Duplicate entry - ${formattedField}: ${entry}`)
return res.status(400).json({ error: `Duplicate entry - ${formattedField}: ${entry}` });
}
结果将是:
Duplicate entry - username: 'todd'
我正在使用 express.js 和 mysql2。
当插入时发生重复输入错误时,我在全局错误处理程序中收到错误并且按预期工作。
当我将其记录到控制台时,错误如下所示:
Error: Duplicate entry 'todd' for key 'users.username_UNIQUE'
at PromisePool.execute (C:\Users\YT\Desktop\PORTFOLIO\MERN\social-talk\server\node_modules\mysql2\promise.js:358:22)
at C:\Users\YT\Desktop\PORTFOLIO\MERN\social-talk\server\models\User.js:45:48 {
code: 'ER_DUP_ENTRY',
errno: 1062,
sqlState: '23000',
sqlMessage: "Duplicate entry 'todd' for key 'users.username_UNIQUE'"
}
我的问题是我不确定如何格式化这个错误,因为它没有给出重复的实际字段或键 (username),但只是这个 sqlMessage 字段,以这种格式向用户显示不是很好看。
PS:我知道 sequelize,但我真的很想知道如何在没有 ORM 的情况下做到这一点
其实我想出了一个不错的解决方案。
因为sqlMessage永远都是一样的格式,所以我先把sqlMessage拆分成一个数组,然后把输入的值提取出来,然后把字段也提取出来,但是由于字段的格式是"database.field_UNIQUE”,我不得不提取“。”之间的字段。和“_”字符。
代码如下所示:
if (err.errno === 1062) {
const errWords = err.sqlMessage.split(" ");
const entry = errWords[2];
const fieldDB = errWords[5];
const formattedField = fieldDB.substring(fieldDB.lastIndexOf(".") + 1, fieldDB.lastIndexOf("_"));
console.log( `Duplicate entry - ${formattedField}: ${entry}`)
return res.status(400).json({ error: `Duplicate entry - ${formattedField}: ${entry}` });
}
结果将是:
Duplicate entry - username: 'todd'