在React中,我能否在单个组件中进行多个fetch操作?

3

我正在使用React作为我的前端框架,Express.js作为我的后端框架。我对这两个框架都很陌生。我有一个名为Papers的组件,我试图首先通过fetch post将一些文档上传到后端服务器,然后在服务器端执行一些操作,最后从同一处理程序中获取来自服务器的结果。我的处理程序代码如下:

        handleDrop(files) {
          var data = new FormData();

          alert((files[0]) instanceof File);
          files.forEach((file, index) => {
            data.append('file' + index, file);
          });

          fetch('/file_upload', {
            method: 'POST',
            body: data
          });

          // the second fetch would crash the app.
          /*fetch('/file_upload').then(function(data){
              return data.json();
          }).then( json => {
              this.setState({
                  papers: json
              });
              console.log(json);
          });*/
        }

我这里是 get 方法的 Express 后端代码:

app.get('/file_upload', function(req, res){
    // testing
    res.send({name:"lol"});
});

目前的问题是第二次获取数据会导致Express应用程序崩溃。由于我对React和Express不熟悉,是否有人可以给我一些提示,告诉我是否以正确的方式进行操作?谢谢!
服务器代码链接:https://github.com/kaiwenshi/learn-webpack/blob/master/src/server/index.js

首先,你正在发送POST请求,并在展示服务器端的GET部分。 其次,你可以使用响应主体在同一fetch请求中获取答案。 - Georgiy Dubrov
@GeorgiyDubrov 对于混淆感到抱歉,由于POST方法有点长,所以我没有发布它。现在已经在Github链接上了。 - Rocking chief
1个回答

0

如果你想进行POST请求,Express代码应该长这样:

app.post('/file_upload', function(req, res){
    // testing
    res.send({name:"lol"});
});

你只需要调用一次fetch。响应({name: 'lol'})将在Promise中返回:

    handleDrop(files) {
      var data = new FormData();

      alert((files[0]) instanceof File);
      files.forEach((file, index) => {
        data.append('file' + index, file);
      });

      fetch('/file_upload', {
        method: 'POST',
        body: data
      }).then(function(data){
          return data.json();
      }).then( json => {
          this.setState({
              papers: json
          });
          console.log(json); // logs {name: 'lol'}
      });
    }

嗨,谢谢!所以我尝试在我的post方法中添加res.send,并根据您的建议修改了我的react fetch代码。这次没有错误,但是我什么也没得到?您有任何想法为什么会发生这种情况吗?谢谢! - Rocking chief
@Rockingchief,你能确认即使使用一个简单的app.post方法,例如我提到的那个,什么都不做只是发送一个简单的回复“lol”,你也得不到任何返回吗?你在Github链接中发送的app.post相当复杂,我宁愿排除这种复杂性。 - Mitch Lillie
所以我将那部分注释掉,但仍然没有得到任何返回。 - Rocking chief
@Rockingchief,你能试着让你的fetch行看起来像这样吗?我启动了一个服务器,应该以完全相同的方式发送数据:fetch('https://IncomparableGleefulSpecialist--MitchLillie.repl.co/testing', { - Mitch Lillie
所以我刚修改了我的获取(fetch)代码,但仍然没有任何数据显示出来。我不确定你是否可以在post请求中返回数据?因为我觉得这应该是get请求的工作?再次感谢! - Rocking chief
看控制台,我得到了一个未捕获的(在承诺中)SyntaxError:JSON中位置0处的意外标记F。有什么建议吗?谢谢! - Rocking chief

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接