Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用create-react-app通过更新json文件发布请求_Node.js_Ajax_Reactjs_Express_React Router - Fatal编程技术网

Node.js 使用create-react-app通过更新json文件发布请求

Node.js 使用create-react-app通过更新json文件发布请求,node.js,ajax,reactjs,express,react-router,Node.js,Ajax,Reactjs,Express,React Router,我正在使用CreateReact应用程序制作一个项目。存在已配置的服务器等。我正在应用程序中使用react router dom进行路由。有“评论”部分。当它开始渲染自己时,它会转到我的本地json文件,并使用ajax从那里获取注释。当用户单击“提交”时,它会将带有表单字段的POST请求发送到同一个json文件。我有向json文件添加新对象的代码。当用户处于“/api/comments”路由时,它应该工作。这是将新对象添加到我的json文件(需要express)的代码: 但我不知道如果我使用的是

我正在使用CreateReact应用程序制作一个项目。存在已配置的服务器等。我正在应用程序中使用react router dom进行路由。有“评论”部分。当它开始渲染自己时,它会转到我的本地json文件,并使用ajax从那里获取注释。当用户单击“提交”时,它会将带有表单字段的POST请求发送到同一个json文件。我有向json文件添加新对象的代码。当用户处于“/api/comments”路由时,它应该工作。这是将新对象添加到我的json文件(需要express)的代码:


但我不知道如果我使用的是“CreateReact应用程序”,并且它使用的是自己配置的服务器(据我所知),我应该把这段代码放在哪里。也许有一种方法可以改变“CreateReact应用程序”使用的服务器,并将此代码放在那里处理此路由?或者,也许有一种方法可以使用“react router”处理此路由?

如果我正确理解您的问题,您在此处发布的代码是服务器端代码。您使用create react app创建的应用程序是前端应用程序,因此没有任何服务器端代码。但是,您可以托管第二台服务器,该服务器将公开所需的api路由,然后使用axios之类的http库调用该服务器。

我正在使用
create react app
express
作为我的api服务器。设置
express
webpack dev server
一起运行是
create react app
支持的功能

我使用
npm run all
package.json
中定义的启动脚本中启动客户端和代理express api服务器。以下是我认为我需要做的一切:

  • 在我的
    webpack.config.dev.json
    文件中,我在
    devServer
    json块中定义了一个代理设置。明确地:
    代理:{/api”:http://localhost:3001" },
    

  • 在我的
    package.json
    文件中,我配置了一个启动脚本,它使用
    npm run all
    同时启动
    react应用程序和
    express

  • 我使用
    server.js
    启动express;这是我存储您在问题中概述的等效代码的地方

  • 我刚刚发现“CreateReact应用程序”使用WebpackDev服务器,我需要使用“并发”库一次加载2台服务器。第一个应该是webpack的开发服务器,第二个应该是我的API服务器。但我不确定这两种方式中的哪一种。Axios还有比这个更好的吗?
    `app.post('/api/comments', function(req, res) {
      fs.readFile(COMMENTS_FILE, function(err, data) {
        if (err) {
          console.error(err);
          process.exit(1);
        }
        var comments = JSON.parse(data);
        var newComment = {
          id: Date.now(),
          author: req.body.author,
          text: req.body.text,
        };
        comments.push(newComment);
        fs.writeFile(COMMENTS_FILE, JSON.stringify(comments, null, 4), 
    function(err) {
          if (err) {
            console.error(err);
            process.exit(1);
          }
          res.json(comments);
        });
      });
    });`