【问题标题】:how to handle Error: ER_DUP_ENTRY in nodejs?如何处理错误:nodejs中的ER_DUP_ENTRY?
【发布时间】:2021-03-09 21:57:30
【问题描述】:

我正在尝试创建一个函数来在我的 sql 数据库中创建新用户,但我希望我的用户名是唯一的,我设置了一个约束以使其成为我的数据库拒绝重复我的用户名。

// Create and Save a new User
exports.create = (req, res) => {
// Validate request
    if (!req.body) {
        res.status(400).send({
            message: "Content can not be empty!"
        });
    }


    // Create a User
    const user = new User({
        IdUtilisateur: generator.generateID(),
        UserName: req.body.UserName,
        Name: req.body.Name,
        FirstName: req.body.FirstName,
        Password: generator.generatePwd(),
        Acces: req.body.Acces
    });

    // Save User in the database
    User.create(user, (err, data) => {
        if (err) {
            console.log(err);
            res.status(500).send({
                message:
                    err.message || "Some error occurred while creating the User."
            });
        }else res.status(201).send(data);
    });
}

现在在我的代码中,当我尝试使用已经存在的用户名创建新用户时,我收到一个错误作为响应:

"message": "ER_DUP_ENTRY: Duplicate entry 'Nname' for key 'UserName'"

我想知道如何处理这种特殊情况,这样如果我得到这个精确的错误,我可能会做一些事情,比如再试一次,但在最后添加一个 int 或任何东西,那么我该如何测试这个 mysql 错误?

【问题讨论】:

    标签: javascript mysql node.js express


    【解决方案1】:

    你可以使用这样的东西。我想用一种更简洁的方式来编写代码。 这将提高可读性。

    // Create and Save a new User
    exports.create = (req, res) => {
    // Validate request
        if (!req.body) {
            return res.status(400).json({
              success: false,
              message: "Content can not be empty!"
            });
        }
    
        const userDetails = {
            IdUtilisateur: generator.generateID(),
            UserName: req.body.UserName,
            Name: req.body.Name,
            FirstName: req.body.FirstName,
            Password: generator.generatePwd(),
            Acces: req.body.Access
        }
    
    
        // Create a User
        const user = new User(userDetails);
    
        // Save User in the database
        User.create(user, (err, data) => {
    
            if (err) {
                console.log("Error while creating new entry", err);
                return res.status(500).json({
                  success: false,
                  message: (err.code == 'ER_DUP_ENTRY' || err.errno == 1062) ? "Username already exists!" : "Unknown error"
                });
            } 
            
            return res.status(201).send({
              success: true, 
              msg: "Data inserted successfully"
            });
        });
    }
    

    谢谢!

    【讨论】:

    • 您可以添加errno键并在前端签入。
    • 我正在尝试让 api 创建新的用户名,我正在尝试找到某种方法来识别此错误,但我认为您使用 err.code 给了我答案可能是解决方案
    【解决方案2】:

    为了解析 MySQL 返回给 nodejs 的 err 消息并进一步处理我使用这种方式的请求正文:

    try {
        await query('INSERT INTO some_table SET ?', ctx.request.body)
        ctx.status = 201;
        ctx.body = 'ok';
    } catch (err) {
        if (JSON.parse(JSON.stringify(err)).code === ('ER_DUP_ENTRY')) {
            ctx.body = 'record already exists';
        } else {
            ctx.throw(400);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 2017-10-13
      • 2020-10-27
      • 2015-02-15
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多