我觉得这应该是重复的...如果是的话,我找不到正确的线程。
我在具有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
相同的结果。感谢您的任何帮助,谢谢!
答案 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
答案 1 :(得分:1)
按照此线程中的说明,建议不要使用.get(真的)。作为菜鸟,我从不回想任何提及此的教程。
问题的答案是将客户端和服务器逻辑都切换到#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
,如原始帖子中所示。