redirect从Node.JS服务器路由不会呈现下一页

嗨,我有一个反应组件呈现这样的forms:

<form onSubmit={this.onSubmit}> <!-- a bunch of inputs here --> </form> 

函数onSubmit()向axios发出post请求/results

 handleSubmit(e) { var self = this; e.preventDefault(); const {value1, value 2, ....} = this.state; axios.post('/results', { key1 : value1, key2 : value2, etc. }).then(function(response) { if (errors) { self.setState({errors: response.data.errorMessage}); } }).catch(function(error){ console.log(error); }); } 

我有一个在我的server.js的post请求的路由处理程序,它将表单中的数据插入到数据库中。 如果有错误,那么它会将这些数据发送回客户端,否则应该redirect到结果页面。 处理程序看起来像这样:

 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')处理程序,它应该为结果页面提供适当的路线。 但是,当logging插入成功时,它不会redirect到该页面,而是与表单保持同一页面。 我的问题是,我应该从客户端还是服务器redirect到该页面?

通过客户端的Javascript提交Ajax调用只是从服务器获取响应,不pipe它是什么。 redirect不会被浏览器自动处理,它只是对你的javascript的ajax响应。 由您的客户端JavaScript来决定如何处理redirect响应。

你有几个select。 你可以在你的客户端Javascript中检测到redirect响应,然后用新的位置设置window.location并手动告诉浏览器去新的页面。 或者,您可以让浏览器提交表单,而不是您的客户端JavaScript,然后浏览器将自动执行redirect响应。


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