我正在使用nodejs学习后端,我完全是初学者,只是一个菜鸟问题。
我为每个验证错误发送状态代码 400,并且我注意到控制台每个请求都会记录很多错误。这是正确的方法吗?或者我应该输入 200+ 状态?
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 });
}
};
使用 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 });
}
};
要更多地了解状态码,请查看这里