Javascript 如何在路由中呈现回调JSON响应

Javascript 如何在路由中呈现回调JSON响应,javascript,json,node.js,Javascript,Json,Node.js,我想将JSON响应body传递给route index.js中的render函数 这就是我目前所拥有的,我无法理解如何构造它,以便可以在res.render中访问body router.get('/', function(req, res, next) { var request = require('request') request.post('https://getpocket.com/v3/get', { headers: {'content-type':

我想将JSON响应
body
传递给route index.js中的render函数

这就是我目前所拥有的,我无法理解如何构造它,以便可以在
res.render中访问
body

router.get('/', function(req, res, next) {

    var request = require('request')

    request.post('https://getpocket.com/v3/get', {
      headers: {'content-type':'application/json'},
      body: JSON.stringify({
        consumer_key:'...',
        access_token:'...',
        tag: 'nodejs'
      })
    }, function (err, res, body) {
        // how to pass body to render?
    })

    res.render('index', { 
        title: 'Express', 
        data: body
    });
}); 

你很接近。试试这个

router.get('/', function(req, res, next) {

    var request = require('request')

    request.post('https://getpocket.com/v3/get', {
      headers: {'content-type':'application/json'},
      body: JSON.stringify({
        consumer_key:'...',
        access_token:'...',
        tag: 'nodejs'
      })
    }, function (err, response, body) {// notice i changed res to response, to differentiate between express response object and request's response
        res.render('index', { 
          title: 'Express',   
          data: body
        });
    })
}); 

在发表文章之前,将body创建为变量,然后简单地重用该变量?在渲染中添加一个新路由,并在回调中调用该路由。我以前尝试过这样做,但它抱怨res.render typeOf函数,但奇怪的是,这次它可以工作。在每个路由中实现请求是正常的做法吗?我最初在一个自定义模块中有此请求。实际上,问题是原始代码中有两个
res
变量。一个来自express,它有
render
方法,另一个来自请求模块,它没有
render
方法。因此,当您从
request.post
的回调访问
res
时,它实际上指向
request
中的
res
。这就是为什么你早些时候犯了那个错误。现在,由于我将参数的名称更改为
response
,它工作正常。谢谢。您通常在每个路由中执行请求呼叫吗?或者理想情况下,我需要一个实现所有数据请求的自定义模块?这取决于具体情况。但是,我认为在你的情况下,一个单独的模块会更好。它使“完全删除请求模块并插入其他模块而不是请求”这样的事情变得更容易。