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

66bbxpm5  于 2023-01-13  发布在  iOS
关注(0)|答案(2)|浏览(173)

我正在尝试通过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);
jqjz2hbq

jqjz2hbq1#

这里有一些额外的花括号(或者缺少一个return,取决于你怎么看它)。当你使用带花括号的lambda(箭头函数)时,你必须显式返回一个值,否则它将返回undefined。

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

其中之一:

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

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

这两种格式都将返回实际的axios承诺,而不是默认的undefined。

bvjxkvbb

bvjxkvbb2#

export const fetchPost = () => {
  return axios.get(url);
};

这对我很有效!

相关问题