节点/ Express-res.status()。send()仅发送状态,不发送对象

时间:2018-11-30 05:40:43

标签: javascript node.js express fetch

我的后端路由存在问题,其中res.status().send()仅向客户端发送状态代码,但不会向客户端发送位于send()内部的对象。

这是我的代码(删除了所有代码,但为了简洁起见):

exports.user_signup = (req, res) => {
  const { body } = req;
  const { companyName, password, email } = body;

  User.find({ email: email }, (err, previousUsers) => {
    if (err) {
      return res.status(400).send({
        message: "There was an issue signing up."
      });
    } else if (previousUsers.length > 0) {
      return res.status(403).send({
        message: "Records show this email is linked to another account."
      });
    }
}

当我从客户端创建fetch request时,响应仅从服务器返回status code,但是服务器上send()方法中的对象中没有响应。只是吐口水,我就扔了res.status(200).json(object),以json的形式发送对象毫无用处。

这是我从客户端获取的请求:

  fetch("http://localhost:3000/users/accounts/", {
    method: "post",
    headers: {
      Accept: "application/json",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(userData)
  }).then(response => console.log(response));
}

为了显示我得到的响应,我特意将一些表单数据从客户端发布到了会引发403错误的路由,这就是我在浏览器控制台中得到的响应:

Response {type: "basic", url: "http://localhost:3000/users/accounts/", redirected: false, status: 403, ok: false, …}

因此,我能够成功地将状态从路由发送回客户端,但是我一生都无法弄清楚为什么send()不随同发送对象。

1 个答案:

答案 0 :(得分:2)

body返回的响应的fetch()ReadableStream。您需要对其进行处理以使其变为可用的东西。通常,您将调用response.json()将其解析为JSON对象:

fetch("http://localhost:3000/users/accounts/", {
    method: "post",
    headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
    },
    body: JSON.stringify(userData)
})
    .then(response => response.json())
    .then(response => console.log(response));
}