前端的axios.post不返回ant结果

Posted

技术标签:

【中文标题】前端的axios.post不返回ant结果【英文标题】:Axios.post on the front end doesn't return ant result 【发布时间】:2021-12-07 20:20:17 【问题描述】:

这个应用程序的想法是用户在网站主页的搜索栏上输入 Twitter 帐户 ID(比如“nodejs”),然后使用 axios.post 将其发送到服务器。 Express 应用程序使用该字符串从 Twitter API 中提取数据。

我可以获得运行 Express 的控制台上显示的 API 结果,但我无法将结果返回给客户端。它只是什么都不返回。对于网站 URL,它应该是 localhost:3000/dashboard/nodejs,但它以 localhost:3000/?search=nodejs 结尾(输入元素的名称是 'search')。而且网站不会切换并停留在主页上。

fetchTweets(客户端):

const fetchTweets = (value, postBody) => 
    console.log('fetched from frontend')
    return (
        axios.post(`/$value`, postBody)
            .then(res => 
                const result = res.data;
                return  result 
            )
    )

handleSubmit(调用 fetchTweets):

const handleSubmit = async (value) => 
        try 
            const postBody =  twitterId: '0' 
            const res = await fetchTweets(value, postBody);
            console.log(res)
            if (res.result.usernameError) 
                setError('No username found. Please enter a correct username')
                console.log(error)
            
            else if (res.result.serverError) 
                setError('Error Fetching Data from Server')
                console.log(error)
            
            else 
                setTweets(res.result)
                history.push(
                    pathname: `/dashboard/$value`,
                )
            
         catch 
            setError('Error fetching data from server.')
        
    

搜索组件:

<Search 
    onSubmit=async (value) => 
        setError(false);
        setLoading(true);
        handleSubmit(value)
 />

路由器(服务器):

router.post('/:account', async function (req, res, next) 
  try 
    lastTwitterId = req.body.twitterId;
    twitterObject = await twitter.getTweets(req.params.account.toLowerCase(), lastTwitterId);
    res.status(200).json(twitterObject)
    res.status(200).end();
   catch 
    res.status(501).json( serverError: true )
  
);

【问题讨论】:

【参考方案1】:

这里的问题是fetchTweets() 没有等待 axios 请求。它没有返回任何内容,因为当您返回时请求仍在进行中。

另外,try-catch 是首选而不是 .then().catch()

例子:

const fetchTweets = (value, postBody) => 
    console.log('fetched from frontend');
    try 
        const response = await axios.post(`/$value`, postBody);
        return response.data;
     catch(err) 
        return err.message;
    

【讨论】:

以上是关于前端的axios.post不返回ant结果的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS/Express Axios POST 返回 404,来自 Postman

前端axios请求, 后端接口返回文件流,完成下载

React AXIOS post - 简单测试不起作用(快递)

Axios Post 200 响应后不返回数据

从 node.js 发送结果以做出反应

axios post请求后台接收不到参数 和 一些配置问题