首页 > 解决方案 > API 未返回正确的 JSON (react/express/axios)

问题描述

我觉得这应该是重复的......如果是我没有找到正确的线程。

我在带有前端的服务器上有一个Express API(使用)。API 应该返回一个给客户端。mongooseReactJSON

问题:它工作正常,但Postman返回错误JSONReact

我发送的Postman内容(这会产生正确的响应):

{"fileHashValue"
:
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}

服务器代码:

app.get("/userData", function(req, res) {
  const fileHashValue = req.body.fileHashValue;
  UserData = UserData.findOne(
    {
      fileHashValue
    },
    function(err, userdata) {
      res.json({
        userdata
      });
    }
  );
});

客户代码:

componentDidMount() {
  axios
    .get(
      "http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData",
      {
        fileHashValue:
          "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
      }
    )
    .then(res => {
      console.log(res.data);
    });
}

看起来这一切都应该有效,但它的响应就像我发送了一个空白请求一样。IE,如果我在其中发送一个空白请求,Postman它会给我与我登录时相同的结果React。任何帮助表示赞赏,谢谢!

标签: reactjsexpressaxios

解决方案


该函数axios.get()期望请求配置作为第二个参数(不是您的原始参数)。

您可以按如下方式设置参数:

axios.get("http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData", {
    params: {
        fileHashValue: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    }
})
.then(res => {
        console.log(res.data);
});

更详细的解释:https ://flaviocopes.com/axios/#get-requests


正如提到的另一个答案,使用get动词可能不适合您的需要。Get 主要用于获取资源,不能包含正文。使用post可以防止这种情况。Post 主要用于创建资源并且可以有一个 body :

axios.post("http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData", {
    params: {
        fileHashValue: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    }
})
.then(res => {
        console.log(res.data);
});

如果您的目标确实是简单地获取一个元素,我建议更改您的路由架构以包含您尝试在 url 中获取的 id:

axios.get("http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", {})
.then(res => {
        console.log(res.data);
});

并调整您的后端:

app.get("/userData/:id", function(req, res)

然后可以在req.params.id


推荐阅读