我正在尝试通过www.example.com()从服务器获取数据。axios.post().
决定使用POST而不使用GET,因为我想发送一个带有id的数组以便在数据库中查找,而这个数组可能太大,不适合GET查询参数。
我设法在POST的正文中发送了一个带有id的数组。它到达了我的服务器。我可以成功地在数据库中找到这些项。这些项然后在响应中返回。数据显示在Chrome devtools〉Network(状态200)中。当我使用Postman手动发送请求时,我也得到了正确的内容。
一切似乎都运行良好,但是响应没有到达axios函数中的data变量。
我花了一天的时间尝试这里所有类似答案的解决方案。没有任何效果...
我还尝试了GET并在查询参数中发送ID,这也会出现同样的错误。我怀疑我在异步/等待中做错了什么,因为我得到了这个"中间值"的东西。
先谢谢你的帮助。
CLIENT axios函数
const url = 'http://localhost:5000';
export const getStuff = Ids => {
axios.post(
`${url}/cart/stuff`,
{
Ids: Ids,
},
{
headers: {
'Content-Type': 'application/json',
},
}
);
};
客户端操作
import * as api from '../api';
export const getStuff = Ids => async dispatch => {
try {
// Ids is an array like ["5fnjknfdax", "5rknfdalfk"]
const { data } = await api.getStuff(Ids);
// this gives me the error in the title, data never comes through
//dispatch(-dolater-);
} catch (error) {
console.log(error);
}
};
服务器控制器
export const getStuff = async (req, res) => {
try {
const { Ids } = req.body;
const stuff = await STUFF.find().where('_id').in(Ids);
console.log('SERVER', stuff);
// this works until here. request comes through and
// I can successfully find the stuff I want in the database
res.status(200).json(stuff); // this also works, response is being sent
} catch (error) {
res.status(404).json({ message: error });
}
};
服务器路由
router.post('/cart/stuff', getStuff);
2条答案
按热度按时间jqjz2hbq1#
这里有一些额外的花括号(或者缺少一个
return
,取决于你怎么看它)。当你使用带花括号的lambda(箭头函数)时,你必须显式返回一个值,否则它将返回undefined。其中之一:
这两种格式都将返回实际的axios承诺,而不是默认的undefined。
bvjxkvbb2#
这对我很有效!