开发者问题收集

axios.post 未从服务器返回数据:“无法解构‘(中间值)’的属性‘数据’,因为它未定义”

2021-01-13
9905

我正尝试通过 axios.post() 从服务器获取数据。

决定使用 POST 而不是 GET,因为我想发送一个带有 id 的数组以在数据库中查找,该数组可能太大而无法放入 GET 查询参数中。

我设法在 POST 正文中发送了一个带有 id 的数组。这到达了我的服务器。我可以成功地在数据库中找到项目。然后这些项目在响应中返回。数据显示在 Chrome devtools > 网络(状态 200)中。当我使用 Postman 手动发送请求时,我也得到了正确的内容。

一切似乎都运行良好,但响应并未到达 axios 函数中的数据变量中。

我花了一天时间尝试这里所有类似答案的解决方案。没有奏效……

我也尝试了 GET 并在查询参数中发送 id,这给出了相同的错误。我怀疑我在使用 async/await 时出了点问题,因为我得到了这个“中间值”东西。

提前感谢帮助。

客户端 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个回答

这里有一些多余的花括号(或者缺少 return ,具体取决于您如何看待它)。当您使用带有花括号的 lambda(箭头函数)时,您必须明确返回一个值,否则它将返回未定义。将您的代码从此代码:

export const getStuff = Ids => {
  axios.post(...);
};

更改为以下代码之一:

// Option 1
export const getStuff = Ids => {
  return axios.post(...);
};

// Option 2
export const getStuff = Ids => axios.post(...);

任何一种格式都将返回实际的 axios 承诺,而不是默认的未定义。

acomputerdog
2021-01-13
export const fetchPost = () => {
  return axios.get(url);
};

这对我有用!!

Subham
2023-01-09