首页 > 解决方案 > res.send() 没有发回完整的数据集

问题描述

希望大家能帮我解开这个谜。我为我的 API 创建了一个端点:

apiRouter.get("/username", async (req, res) => {
  const { username } = req.body;
  try {
    const user = await getUserByUsername(username);

    res.send({ message: "This is your user", user });
    console.log("this is user", user);
  } catch (error) {
    throw error;
  }
});

这是一个 GET 路由,当用户与此 url 路径交互时,它应该以这种方式发回消息和用​​户对象:

 http://localhost:3000/api/users/username 

当我通过 Postman 访问端点时,我得到了消息和用户对象。看起来像这样的东西:

{
    "message": "This is your user",
    "user": {
        "customer_id": 5,
        "first_name": "Jessica",
        "last_name": "Blue",
        "email": "baker@space.com",
        "username": "jess1",
        "password": "1234",
        "address_1": "123 pretty lane",
        "address_2": "Apt 31",
        "city": "Riverside",
        "state": "California"
    }
}

但是,当我通过前端访问路由时,消息会返回,但user不会。我正在使用以下方法调用服务器:

export async function getUserByUsername(username) {
  try {
    const { data } = await axios.get("/api/users/username", {
      username,
    });
    console.log(data);
    return data;
  } catch (error) {
    throw error;
  }
}

我真的不确定为什么用户没有收到回复。该路线有效,我只是没有得到预期的回应。我花了几个小时试图找到一个没有运气的修复程序。任何帮助将不胜感激。在此处输入图像描述

标签: javascriptexpressaxios

解决方案


目前,您无法在大多数浏览器中发送带有 get 请求的正文。所以你有两个选择:

将您的后端方法更改为 POST:

apiRouter.post("/username", async (req, res) => {
  const { username } = req.body;
  .
  .
  .
}

并像这样使用 axios:

const { data } = await axios.post("/api/users/username", {
  username,
});

或者,如果您想坚持使用 get 方法,请接受用户名作为查询或参数:

apiRouter.get("/username/:username", async (req, res) => {
  const { username } = req.params;
  .
  .
  .
}

并像这样使用 axios:

const { data } = await axios.get(`/api/users/username/${username}`);
    

或者

apiRouter.get("/username", async (req, res) => {
  const { username } = req.query;
  .
  .
  .
}

并像这样使用 axios:

const { data } = await axios.get(`/api/users/username`, { params: { username } });

推荐阅读