Node.js res.render()请求不起作用

时间:2018-02-26 01:31:40

标签: javascript node.js ejs

我正在尝试渲染一个EJS模板,并使用节点包Request将数据传递给它。我在上一个项目中使用node-fetch没问题。

以下是一个快速摘录:

const fetchCurrentWeather = (url, res) => {
   fetch(url)
      .then(res => res.json())
      .then(data => res.render('pages/weather', {
        currentId: data.list
      }))
      .catch(err => {
         console.log(err);
         res.sendStatus(500);
      });
}

这将使用API​​响应中的数据呈现EJS天气页面模板。

然而,在这个最新的项目中,我正在尝试使用Node Package Request来做同样的事情而我失败了。这是代码:

app.post('/', (req, res, next) => {
    const paramOptions = {
          url: 'https://api.foursquare.com/v2/venues/search',
          method: 'GET',
          qs: {
            client_id: 'W033PDIYFI2TSAUO4L5ANUFOAUMZV32NUWNOF0NL0JS2E5W4',
            client_secret: 'SM1ZI11XOMPVMEGMBZXSN3LGTLOBQCVGIM1SN4QAO0QTCSM1',
            near: 'xxxxxx',
            intent: 'browse',
            radius: '15000',
            query: 'pizza',
            v: '20170801',
            limit: 1
          }
    };

    request(paramOptions, function(err, res, body) {
         if(err) {
           console.log(err)
         } else {
           res.render('pages/search'); //THIS WILL NOT WORK
           console.log(body) // RETURNS DATA FROM API ENDPOINT

        }
    });
    res.render('pages/search'); // THIS WILL WORK
});

有效的res.render()超出了Request函数的范围,因此我无法从此Request函数访问返回的数据。当我console.log请求函数的主体时,我确实在终端视图中返回了JSON数据,所以我知道Request正在工作,但我不确定如何将这些数据传递到EJS模板中,就像我一样我的fetch()示例。

1 个答案:

答案 0 :(得分:0)

有两个单独的res参数,内部参数隐藏外部参数。更改此行中的名称:

request(paramOptions, function(err, res, body) {

这样的事情:

request(paramOptions, function(err, response, body) {

然后,当您致电res.render()时,它将使用您想要的更高范围的。

您可能还需要将一些数据作为第二个参数传递给res.render(filename, data),以便将request()的结果提供给渲染操作。

并且,在if (err)条件下,您应该发送错误状态,可能是res.sendStatus(500)