Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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服务器重定向到路由不';不要渲染下一页_Node.js_Reactjs_Redirect - Fatal编程技术网

从Node.JS服务器重定向到路由不';不要渲染下一页

从Node.JS服务器重定向到路由不';不要渲染下一页,node.js,reactjs,redirect,Node.js,Reactjs,Redirect,嗨,我有一个react组件,它呈现如下形式: <form onSubmit={this.onSubmit}> <!-- a bunch of inputs here --> </form> app.post('/results', function(req, res, next) { const reportExists = Report.findOne({ attributes: ['caseId'], where: {caseId

嗨,我有一个react组件,它呈现如下形式:

<form onSubmit={this.onSubmit}>
  <!-- a bunch of inputs here -->
</form>
app.post('/results', function(req, res, next) {
  const reportExists = Report.findOne({
    attributes: ['caseId'],
    where: {caseId : req.body.caseId},
  }).then(report => {
    if (report) {
      console.log("report already exists");
      res.status(200).send({errorMessage : "Report has been submitted for this case id"});
    } else {
      const report = Report.create(
        {
          // data from form
        }
      ).then(() => {
        console.log('Record inserted successfully');
        var caseId = req.body.caseId;
        res.redirect("/results/" + caseId);
        next();
      })
      .catch(err => {
        console.log('failed to insert record');
        res.status(200).send({errorMessage: "Failed to insert record"});
      });
    }
  });
});
我的
server.js
中有一个post请求的路由处理程序,它将表单中的数据插入数据库。如果有错误,它将把数据发送回客户端,否则它将重定向到结果页面。处理程序如下所示:

<form onSubmit={this.onSubmit}>
  <!-- a bunch of inputs here -->
</form>
app.post('/results', function(req, res, next) {
  const reportExists = Report.findOne({
    attributes: ['caseId'],
    where: {caseId : req.body.caseId},
  }).then(report => {
    if (report) {
      console.log("report already exists");
      res.status(200).send({errorMessage : "Report has been submitted for this case id"});
    } else {
      const report = Report.create(
        {
          // data from form
        }
      ).then(() => {
        console.log('Record inserted successfully');
        var caseId = req.body.caseId;
        res.redirect("/results/" + caseId);
        next();
      })
      .catch(err => {
        console.log('failed to insert record');
        res.status(200).send({errorMessage: "Failed to insert record"});
      });
    }
  });
});

我还有另一个
app.get('/results/:caseId')
处理程序,它应该为结果页面提供适当的路径。但是,当记录成功插入时,它不会重定向到该页面,而是与表单保持在同一页面上。我的问题是,我应该从客户端还是服务器重定向到该页面

通过客户端Javascript提交Ajax调用只会从服务器返回响应,不管它是什么。重定向不是由浏览器自动处理的,它只是对javascript的ajax响应。由客户端Javascript决定如何处理重定向响应

你有两个选择。您可以在客户端Javascript中检测重定向响应,然后使用新位置设置
window.location
,并手动告诉浏览器转到新页面。或者,您可以让浏览器提交表单,而不是客户端Javascript,然后浏览器将自动跟踪重定向响应


另外,在调用
res.redirect()
之后,不应调用
next()
。发送响应后,不应启用其他路由处理程序执行。

res.redirect()之后不要调用
next()