javascript - 在nodejs中使用if条件然后抛出错误是一个好习惯吗?

标签 javascript node.js try-catch

我最近开始使用nodejs,我发现的每个代码都使用不同的结构。我想知道使用 try/catch 和 async/await 是否有任何问题以及应该如何进行错误处理。

module.exports = {
    register: async function(req, res) {
        try {

            // Check if username already exists
            const usernameDB = await User.findOne({ username: req.body.username });
            if (usernameDB) throw new Error('Username already exists');

            // Check if email already exists
            const emailDB = await User.findOne({ email: req.body.email });
            if (emailDB) throw new Error('Email already exists');

            // Hash the password
            const salt = await bcrypt.genSalt(8);
            const hashPassword = await bcrypt.hash(req.body.password, salt);

            // Create a new User
            const newUser = new User({
                username: req.body.username,
                email: req.body.email,
                password: hashPassword
            });
            const savedUser = await newUser.save();
            if (!savedUser) throw new Error('Could not register you account, try again');

            res.status(201).send({
                success: true,
                message: 'Registered successfully'
            });

        }
        catch (err) {
            res.status(400).send({
                success: false,
                name: err.name,
                message: err.message
            });
        }
    }
}

在上面的示例中,我感觉自己滥用了“将某些内容保存到变量中,检查它,如果没有,则抛出并错误”。

最佳答案

这样做实际上是可以的,但如果我是你,我会将你在 catch block 中编写的这些逻辑分离到单独文件中的 Controller 函数中。除此之外,这还可以。

关于javascript - 在nodejs中使用if条件然后抛出错误是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57882754/

相关文章:

java - Try catch 没有捕获错误的数字输入(还得到 java.lang.arithmatic 异常/零)

javascript - through2-map 的目的

javascript - 如何清除处于 redux 状态的数组以进行多选

javascript - 附加但样式未更新

ruby - 高效的 Ruby 和 Node.js 通信/IPC

node.js - socket.io 未传输到浏览器

javascript - 如果一个 div 有这两个类,隐藏包装器

javascript - 还可以发送图像甚至文件的 Socket.io 聊天应用程序

exception - 在 MFC 应用程序中,将最顶层的 try/catch 放在哪里?

c# - 判断是否因为抛出异常而执行到 finally block 中