我有两个路由功能必须呈现相同的页面但基于URL的数据不同。但是一旦我渲染了一个页面,我就无法重新渲染页面,它会抛出错误
Error: Can't set headers after they are sent.
我有两条这样的路线
app.post('/abc',function(req,res){
...
res.render('template',{....})
...
});
app.get('/abc/xyz/:params',function(req,res){
...
res.render('template',{...})
...
});
我在/abc
页面上有一个提交按钮,指向/abc/xyz/params
,但它给我标题错误。
然后,我尝试使用res.json
发送一些数据,稍后我可以使用AJAX处理这些数据,但是一旦按下提交按钮,渲染的页面就会丢失,因此它只会返回一个JSON文件。
我实际上是在尝试更新页面的一部分而不重新加载整个页面,但是一旦按下提交按钮,我就无法保留模板。
我甚至尝试过HTML5历史记录API来更改URL而不刷新,但这甚至给了我同样的错误。
这是我的全部代码
app.post('/login',function(req,res){
dbo.collection("user").find({$and:[{"email":req.body.email},{'password':req.body.password}]}).count().then(function(result){
if(result==1){
dbo.collection("user").findOne({$and:[{"email":req.body.email},{'password':req.body.password}]}, function(err, r) {
req.session.email=req.body.email;
if (err) throw err;
res.render('login', {name:r.name,email: req.body.email,password: req.body.password,status: "Match Found!"});
});
}
else{
console.log('Match not found');
res.render('error_msg', { email: req.body.email,password: req.body.password,status: "Match Not found!"});
}
});
});
app.get('/login/email/:email',function(req,res){
dbo.collection("user").findOne({"email":req.params.email},function(er,r){
if(er)
throw er;
if(r){
res.render('login',{email_search:r.name});
}
else{
res.render('login',{email_search:'No User Found!'});
}
});
});