重新发送和重新渲染调用

Raj*_*Raj 5 javascript node.js express

我试图确定是否可以同时调用res.send(data)然后再调用res.render('reports')。

为了进一步详细解释,当我路由到'/ reports'时,首先在服务器端我对REST进行了REST调用,该API返回了json数据。现在,我希望在客户端上访问此json数据,为此我正在通过JavaScript进行ajax调用。因此使用res.send(),但我也想在此调用中呈现页面

所以看起来像下面在我的服务器端代码

router.get('/reports', function(req,res){
     //Making the REST Call to get the json data
     //then
     res.send(json);
     res.render('reports');
});
Run Code Online (Sandbox Code Playgroud)

每次我在浏览器上点击'/ reports'时,都会看到json值而不是正在呈现的页面,并且控制台抛出错误:发送后无法设置标头。

rob*_*lep 6

您可以为此使用内容协商,其中您的AJAX请求设置Accept标头以告诉Express服务器返回JSON而不是HTML:

router.get('/reports', function(req,res) {
  ...
  if (req.accepts('json')) {
    return res.send(theData);
  } else {
    return res.render('reports', ...);
  };
});
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用req.xhr(尽管不是100%故障安全)来检查请求是否是通过AJAX调用发出的。


cs0*_*iz1 5

不,您不能同时做两个,但是您可以同时渲染页面并发送数据:

res.render('reports',{data:json});
Run Code Online (Sandbox Code Playgroud)

然后访问新呈现的页面中的数据。

或者,您可以在拨打电话时发送一个标志,然后根据该标志决定是渲染还是发送。