如果浏览器的状态不为200

时间:2020-09-10 08:23:47

标签: rest express response next.js

我正在构建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

谢谢,如果问题很愚蠢或以前已经回答过,请原谅我

0 个答案:

没有答案