我正在尝试在以下语法中引发错误:
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'
答案 0 :(得分:1)
throw语句引发用户定义的异常。函数的执行将停止,并且此后将不执行任何操作。
请参见this网站以获取关于throw关键字的帮助。另外,请花时间阅读有关引发新错误的信息,因为这可能是您需要的,而不是引发。这个link也可能有帮助
就发生错误的原因而言,MySQL错误告诉您正在将重复数据插入到用户表中。数据库拒绝它,因为表中已经存在一个昵称为“ test4”的记录。...因此,您不允许将另一个昵称为“ test4”的用户插入表中。
您为什么会问?
这是因为您在表上有一个索引,要求昵称必须唯一。
您可以使用的两个选项如下:
祝你好运,编码愉快。
答案 1 :(得分:0)
我发现我无法在异步函数中引发错误,因此尝试使用回调。
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 errorHandle = (callback) => {
const hasherCallback = (err, pass, salt, hash) => {
if (err) return callback(err)
const sql = `INSERT INTO users SET ?`
const fields = { nickname, email, 'password': hash, salt, thumbnail, type }
const queryCallback = (err) => {
if (err) return callback(err)
return res.json(messages.SUCCESS_MSG)
}
conn.query(sql, fields, queryCallback)
}
return hasher({ password }, hasherCallback)
}
return errorHandle((err) => {
//This one equals console.log({ status: 'error' message: err })
return res.status(500).json(messages.ERROR(err))
})
})
这将打印我想要的日志,而不是应用程序崩溃了。
{
"status": "error",
"message": {
"code": "ER_DUP_ENTRY",
"errno": 1062,
"sqlMessage": "Duplicate entry 'test4' for key 'nickname_UNIQUE'",
"sqlState": "23000",
"index": 0,
"sql": "INSERT INTO users SET `nickname` = 'test4', `email` = 'test4@test.com', `password` = 'FXxSpPBNFfL1KGS0sWn19N191Hj0FXtnCWwMspneVIvwB5UgPBI0MjBskEnHby357j/3VKWM7ffi/5yD5CiIRyAGMWnTaStzbVX/hhD1/y91UW9b8etWpV5koKcn9QsmD9BozX1+wkve66lTNoFUHDWA0BDj4j8O7ltsD4698LQ=', `salt` = 'cu7GlOjK4drxV/SD4CBJtiW5yirc5/TpaAroCBbCQtOy4Asr8rGvTrxArXHmPH6ADTtHlXvUEEoeUD73LS654Q==', `thumbnail` = NULL, `type` = 'local'"
}
}