API未传回正确的JSON(react / express / axios)

时间:2018-12-17 15:13:12

标签: reactjs express axios

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

我在具有Express API前端的服务器上有一个mongoose(使用React)。 API应该向客户端返回JSON

问题:Postman可以正常工作,但是在JSON中返回错误的React

我在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相同的结果。感谢您的任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

函数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主要用于创建资源,并且可以具有主体:

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);
});

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

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

中访问ID

答案 1 :(得分:1)

按照此线程中的说明,建议不要使用.get(真的)。作为菜鸟,我从不回想任何提及此的教程。

HTTP GET with request body

问题的答案是将客户端和服务器逻辑都切换到#include <iostream> using namespace std; void towsoncourse () { bool finishcourse = true; while (finishcourse == true) { int course; cout << "Enter Course: 1 is COSC,2 is ENGL,3 is MATH" << endl; cin >> course; switch (course) { case 1: cout << "COSC" << endl; finishcourse = false; break; case 2: cout << "ENGL" << endl; finishcourse = false; break; case 3: cout << "MATH" << endl; finishcourse = false; break; default: cout << "Error: Enter number corresponding to course." << endl; } } } int main () { towsoncourse (); return 0; } 并发送axios.post,如原始帖子中所示。