如何使用其他数据重新呈现同一页面

时间:2018-06-10 14:52:43

标签: node.js express

我有两个路由功能必须呈现相同的页面但基于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!'});
    }
   });
});

0 个答案:

没有答案