来自axios.get请求的参数在快速后端上未定义

时间:2020-09-21 21:08:56

标签: javascript reactjs api express axios

我正在尝试创建搜索功能,但是当我尝试通过params请求将数据(axios.get)传递到后端时,它显示为undefined。 / p>

我的应用程序请求处理功能:

handleSearch() {
  API.search(this.state.searchType, this.state.searchValue)
  .then(response => { 1 }).catch(error => console.log(error));
}

就我所知,以上内容似乎工作得很好。这些状态值有效,我确实测试了它们是否为defined

我的axios / API功能:

search: function(searT, searV) {
    let searchData = {
      'searchType': searT,
      'searchValue': searV
    };
    return axios.get('/search', searchData).then(response => 1);
  }

根据axios docs和我发现的所有其他资源,以上内容似乎是正确的。 searTsearV值已成功传递到这一点。

后端express功能:

app.get('/search', function(request, response) {
    let {searchType, searchValue} = request.params;
    console.log('SearchType: ' + searchType + ' and SearchValue: ' + searchValue); //both return undefined
  });

searchTypesearchValueundefined,到底是什么?!

我已经看到很多类似的问题,但是似乎没有一个能帮助我解决这个问题。我想知道这是否与我的server.js文件有关,但是我的axios.post请求可以正常工作。

我觉得这将是我弄清楚这周后的事,但是现在它正在杀死我。

多亏了蒙哥马利和react-node,什么解决了这个问题:

return axios.get('/search', { params: searchData }).then(response => 1);

app.get('/search', function(request, response) {
        let {searchType, searchValue} = request.query;
      });

2 个答案:

答案 0 :(得分:2)

只是改变

return axios.get('/search', searchData).then(response => 1);

return axios.get('/search', {params:searchData}).then(response => 1);

在服务器端,您应该将request.params更改为request.query

答案 1 :(得分:1)

searchTypesearchValue在查询字符串中传递,因此必须使用request.query访问它们。

如@ react-node所指出,数据也被错误地传递给axios.get调用。要使用axios.get正确传递查询字符串参数,它需要看起来像这样:

return axios.get('/search', {
  params: searchData
}).then(response => 1);