有主体的获取与无主体的获取(反应,表达)

时间:2019-08-15 02:29:42

标签: reactjs express async-await fetch

我是Web开发人员的新手,在发出带有JSON正文的提取请求时遇到一些问题。现在,如果我不使用主体进行提取调用,则提取将连接到我的api(记录已连接到它的api),从我的数据库中检索值,然后将它们发送回前端而不会出现问题。但是,当我将主体对象添加为提取请求的第二个参数时,提取将永远不会连接到api。没有错误输出,它只是等待,并且我的api从不记录它已连接到的状态。

这是代码。这有效:

//this.props.chosenInterests is an object
    async sample(){
        //url-friendly string
        const university = this.props.chosenUniversity.replace(/\s/, '+');

        const query = '/interest/' + university;

        try{
            const response = await fetch(query, {});
            if(response.ok){
                const jsonResponse = await response.json();
                globalVar = jsonResponse;

                this.forceUpdate();
            }
            else{
                throw new Error('Request Failed!');
            }
        }
        catch (error){
            console.log(error);
        }
    }

这不是:

//this.props.chosenInterests is an object
    async sample(){
        //url-friendly string
        const university = this.props.chosenUniversity.replace(/\s/, '+');

        const query = '/interest/' + university;

        try{
            const response = await fetch(query, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json'
                },
                body: JSON.stringify(this.props.chosenInterests)
            });
            if(response.ok){
                const jsonResponse = await response.json();
                globalVar = jsonResponse;

                this.forceUpdate();
            }
            else{
                throw new Error('Request Failed!');
            }
        }
        catch (error){
            console.log(error);
        }
    }

这是我的api:

//already mounted router at /interest
interestRouter.get('/:university', (req, res, next) => {
    const university = req.params.university.replace(/\+/g, ' ');

    console.log('Connected.');

    db.all('SELECT * FROM Table WHERE Table.university = $university', {$university : university},
        (error, result) => {
            if(error){
                next(error);
            }
            else{
                res.json(result);
            }
        }
    )
});

任何帮助将不胜感激。我只是对为什么我没有收到错误或任何东西感到困惑。

1 个答案:

答案 0 :(得分:1)

POST失败的原因是因为您的快速脚本正在寻找GET,而不是POST。如果将其更改为以下内容:

interestRouter.post('/:university', (req, res, next) => {...

然后您可以在req.body中看到POST的正文。