是否有正确的方法来处理错误验证的状态?

问题描述 投票:0回答:1

我正在使用nodejs学习后端,我完全是初学者,只是一个菜鸟问题。

我为每个验证错误发送状态代码 400,并且我注意到控制台每个请求都会记录很多错误。这是正确的方法吗?或者我应该输入 200+ 状态?

enter image description here

 export const signup = async (req, res) => {
  const { email, name, password } = req.body;

  try {
    if (!email || !name || !password) {
      throw new Error("All fields are Required!");
    }

    const userAlreadyExists = await User.findOne({ email });
    if (userAlreadyExists) {
      return res
        .status(400)
        .json({ success: "Failed!", message: "User Already Exist!" });
    }

    //hash the password
    const hashedPassword = await bcryptjs.hash(password, 10);
    //verification code for sending in the email!
    const verification = generateVerificationCode();

    const user = new User({
      email,
      password: hashedPassword,
      name,
      verification,
      verificationTokenExpiresAt: Date.now() + 24 * 60 * 60 * 1000, // 24hours
    });

    await user.save();

    //jtw Token
    generateTokenAndSetCookies(res, user._id);
    //email Send to the new User
    // await nodeEmailVerification(email, verification);

    res.status(201).json({
      success: true,
      message: "User Created Successfully",
      user: {
        ...user._doc,
        password: undefined,
      },
    });
  } catch (error) {
    return res.status(400).json({ success: false, message: error.message });
  }
};
node.js express http-status-code-404
1个回答
0
投票

使用 400 状态代码是正确的,但对于所有错误情况都使用 400 状态代码是错误的。 400 状态代码用于验证错误或缺少必填字段的格式错误的请求。然而,catch 处理所有错误情况,如服务器端错误等,因此我们需要从 catch 返回 500 状态代码。也就是说,您应该对所有错误情况使用正确的状态代码,例如 400(错误请求)、404(未找到)和 500(内部服务器错误)。在这种情况下,您可以在前端处理它,以避免在浏览器控制台中显示所有错误。您可以根据错误情况向用户显示错误消息,而不是将错误记录到浏览器。

我用正确的状态代码更新了您的代码。

export const signup = async (req, res) => {
  const { email, name, password } = req.body;

  try {
    // Here, you will validate params so will return status 400 code
    if (!email || !name || !password) {
      return res.status(400).json({ success: false, message: "All fields are required!" });
    }

    const userAlreadyExists = await User.findOne({ email });
    if (userAlreadyExists) {
      return res
        .status(400)
        .json({ success: false, message: "User already exists!" });
    }

    const hashedPassword = await bcryptjs.hash(password, 10);
    const verification = generateVerificationCode();

    const user = new User({
      email,
      password: hashedPassword,
      name,
      verification,
      verificationTokenExpiresAt: Date.now() + 24 * 60 * 60 * 1000, // 24 hours
    });

    await user.save();

    generateTokenAndSetCookies(res, user._id);

    res.status(201).json({
      success: true,
      message: "User created successfully",
      user: {
        ...user._doc,
        password: undefined,
      },
    });
  } catch (error) {
    // Here, you will handle server-side errors and will return status 500 code
    return res.status(500).json({ success: false, message: "Server error: " + error.message });
  }
};

要更多地了解状态码,请查看这里

© www.soinside.com 2019 - 2024. All rights reserved.