gpt4 book ai didi

mysql - 我用 try-catch block 包裹但应用程序崩溃了

转载 作者:行者123 更新时间:2023-11-29 09:49:59 28 4
gpt4 key购买 nike

我试图在以下语法中抛出错误:

  if(err) throw err

我期望的是通过“console.log(err)”行打印日志,而不是应用程序崩溃。

但是,这会发生应用程序崩溃的错误,并显示

throw err; // Rethrow non-MySQL errors
^

Error: Error: ER_DUP_ENTRY: Duplicate entry 'test4' for key 'nickname_UNIQUE'

我不明白为什么会发生这种情况,需要专家的帮助。

代码:

 api.post('/', (req, res) => {
const email = req.body.email
const nickname = req.body.nickname
const password = req.body.password
const thumbnail = req.file
const type = req.body.type

const hasherCallback = (err, pass, salt, hash) => {
if (err) throw err

const sql = `INSERT INTO users set ?`
const fields = { nickname, email, 'password': hash, salt, thumbnail, type }
const queryCallback = (err) => {
if (err) throw err

return res.json(messages.SUCCESS_MSG)
}

conn.query(sql, fields, queryCallback)
}
try {
return hasher({ password }, hasherCallback)
} catch (err) {
//handle errors here
console.log(err)
}
})

return api
}

//Error : Error: Error: ER_DUP_ENTRY: Duplicate entry 'test4' for key 'nickname_UNIQUE'

最佳答案

throw 语句抛出用户定义的异常。函数的执行将停止,从此时起将不会执行任何操作。

参见this有关 throw 关键字的帮助的网站。另外,请花时间阅读有关抛出新错误的信息,因为这可能正是您需要的而不是抛出。这个link也可能有帮助

就发生错误的原因而言,MySQL 错误告诉您正在将重复数据插入到用户表中。数据库拒绝它,因为表中已经存在昵称值为“test4”的记录...因此不允许您将具有相同昵称“test4”的另一个用户插入表中。

你可能会问为什么?这是因为您在表上有一个索引,要求昵称是唯一的。

您可以使用的两个选项如下:

  1. 向您的 JavaScript 添加更多代码,告诉您的用户,如果该昵称已被其他用户使用,请请求他们选择另一个昵称并重试。
  2. 如果您希望允许多次插入相同的昵称,请通过删除表上的唯一昵称要求来允许重复的昵称。为此,您需要修改表上的索引。如果您的其他表字段没有唯一的值,这可能很危险并且不适合。

祝你好运,编码愉快。

关于mysql - 我用 try-catch block 包裹但应用程序崩溃了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54979443/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com