【问题标题】:Expressjs use request body from REST ApiExpressjs 使用来自 REST Api 的请求正文
【发布时间】:2015-09-15 14:12:45
【问题描述】:

我正在为我们的网络客户端试验 nodejs / expressjs,但在将数据传递到我的 .ejs 模板时遇到了问题:

我有一个对我们的应用程序服务器的 REST API 调用,它返回一个 json 元素。我希望我可以直接在路由器中调用 API 并将其作为变量传递给我的模板,但我似乎无法提取 json 元素。我知道我可以直接在模板中使用 ajax 调用,但我想尝试坚持 MVC 设计模式。

由于某种原因,将 json 元素返回给我然后传递的局部变量似乎不起作用。

我整天都在互联网上搜寻答案,但在我所看到的所有教程中,每个人都只是记录他们的结果。这一切都很好,但如果能用它做点什么就好了。

`

    var url = "http://application.server"

    /* GET home page. */
    router.get('/', function(req, res, next) {

  request(url, function (error, response, body) {
    console.log(body); //returns Json element, how can I extract this??
  });

  res.render('index', {
    //data: body <---- I want to pass the JSON element to my template here
  });

    });

`

谢谢!!!!

【问题讨论】:

  • 你为什么不在你给request()的回调中调用res.render
  • 是的,我不知道为什么我不这样做.....它工作得很好:) 我想我应该回家休息一天。谢谢菲尔!

标签: javascript json node.js rest express


【解决方案1】:

@Phil 感谢您提供完全合乎逻辑的答案 :)

我现在在回调中渲染我的模板并将body解析为带有JSON.parse(body)的JSON对象。稍后我将不得不进行更多的 API 调用并传递它们,但对于我们的原型来说这是可行的。

var url = "http://application.server"

/* GET home page. */
router.get('/', function(req, res, next) {
  request(url, function (error, response, body) {
    res.render('index', {data:JSON.parse(body)});
  });
});

【讨论】:

  • 如果您需要开始进行更多 API 调用,您可能会发现使用 async 库 (async.parallel) 或承诺您的 API 调用并在需要聚合多个异步时使用 Promise.all 会有所帮助调用一个回调。
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多