javascript - res.send 和 res.render 调用

标签 javascript node.js express

我正在尝试确定是否可以同时调用 res.send(data) 和 res.render('reports')。

为了进一步详细解释,当我路由到“/reports”时,首先在我的服务器端我对返回 json 数据的 API 进行 REST 调用。现在我希望在客户端上访问这个 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');
});

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

最佳答案

你可以使用 content negotiation为此,您的 AJAX 请求设置 Accept header 以告诉您的 Express 服务器返回 JSON 而不是 HTML:

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

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

关于javascript - res.send 和 res.render 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847070/

相关文章:

javascript - 将字节传递给 NodeJS 插件

node.js - 在node中同时使用Firebase Admin SDK和Client SDK

node.js - 如何使用 .d.ts 文件

sql-server - 如何在 Express 4 Web 应用程序中跨多个路由使用单个 mssql 连接池?

javascript - 是否有可能有一个隐藏的Javascript文件

javascript - 为什么我的 JQuery 仅当我在其中放置窗口加载函数时才会运行?

javascript - JS这个函数有问题

javascript - Angular 4路由器返回未定义

javascript - 将图表绑定(bind)到 Canvas 高度宽度

javascript - 用react.js类编写的BMI计算器需要在提交按钮上单击两次才能改变一些this.state值