我正在构建REST API,但遇到了一个小问题
当我向其发送请求时,浏览器在状态为200时正在正确读取响应。 但是,当我发回包含任何其他代码的响应时,浏览器将忽略其主体(它保留了错误原因)
例如,而不是接收此信息:
{
result: false,
error: 'email is invalid'
}
我得到:
POST http://localhost:3333/api/auth/register 409 (Conflict)
Error: Request failed with status code 409
at createError (createError.js:16)
at settle (settle.js:17)
at XMLHttpRequest.handleLoad (xhr.js:69)
这是注册处理程序的代码:
const register = async (req, res, next) => {
const validation_result = validationResult(req);
if (!validation_result.isEmpty()) {
return res.status(400).json({
result: false,
errors: validation_result.array({ onlyFirstError: true }),
});
}
try {
const { firstName, lastName, email, password } = req.body;
// check if email exists
const is_available = await User.findOne({ email });
if (is_available)
return res.status(409).json({ result: false, msg: "email is unavailable" });
const hashed_password = bcrypt.hashSync(password, 10);
const new_user = new User({
firstName,
lastName,
email,
password: hashed_password,
});
const user = await new_user.save();
const token = JWT.sign(
{ id: user._id },
process.env.JWT_SECRET,
{
expiresIn: "3hr",
}
);
res.status(201).json({ result: true, token, user });
} catch (err) {
next(err);
}
};
我通过省略状态码解决了这个问题,值得一提的是,无论状态码如何,我都可以在POSTMAN上正确看到JSON内容
但是有人可以解释为什么会发生这种情况,以及是否有一种方法可以使用状态代码并仍然获得响应正文吗?
我正在使用Chrome,并且在前端使用React和Next.js
谢谢,如果问题很愚蠢或以前已经回答过,请原谅我