Javascript ExpressJs视图中的变量不完整

Javascript ExpressJs视图中的变量不完整,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,好吧,我是Nodejs的新手,只是在玩它。我试图将一些简单的python代码转换为js。我向Youtube API发送get请求,API返回50个json格式的结果。 我的express设置是全新的。使用ejs、手写笔和无会话。 这是我的index.js代码 exports.index = function(req, res){ var https = require("https"); var url = "https://www.googleapis.com/youtube/

好吧,我是Nodejs的新手,只是在玩它。我试图将一些简单的python代码转换为js。我向Youtube API发送get请求,API返回50个json格式的结果。 我的express设置是全新的。使用ejs、手写笔和无会话。 这是我的index.js代码

exports.index = function(req, res){
    var https = require("https");
    var url = "https://www.googleapis.com/youtube/v3/search?part=snippet&chart=mostPopular&key={API_KEU}&q=victorious&maxResults=50";
    https.get(url,function(response){
        response.on('data',function(d){
                response.setEncoding('utf8');
                console.log(d);
                res.render('index', { title: 'Express',data: d });
        });
    });
};
这是我的代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p> <%= data %> </p>
  </body>
</html>
问题是我的控制台正在打印google返回的所有50个结果,但它没有显示在视图中。有什么问题吗?以及如何修复它?

尽管您可以使用https模块发出请求,但大多数人都会使用一个不错的第三方库。最受欢迎的是。另一个流行的选择是,这是由《快报》的作者写的

由于您是Node.js新手,因此应该了解发生了什么以及如何直接使用https模块

调用https.get时,返回回调的响应对象是流

每次接收到数据块时,可读流都会发出“数据”事件。数据可能被分成几个块。每个区块都有一个“数据”事件。这是由你来组装所有的块在一起

当接收到所有数据时,流将发出“结束”事件。这时您将处理数据并呈现模板

您在每个“数据”事件中获得的块将是。但是如果调用response.setEncoding'utf8',则会导致块作为字符串返回

在处理第一个“数据”事件之前,需要调用response.setEncoding。在代码中,第一个“数据”事件获取缓冲区,然后调用response.setEncoding,任何其他数据事件获取字符串

下面是它的外观:

https.get(url, function(response) {
    // each time we get a chunk, we will append it to this var
    var data = '';

    response.setEncoding('utf8');

    response.on('data', function(chunk) { data += chunk; });

    response.on('end', function() {
        // when we get the 'end' event we know all the data has
        // been received
        console.log(data);
        res.render('index', { title: 'Express', data: data });
    });
}).on('error', function(err) {
  // any error handling goes here
  console.error(err);
});
这看起来像是很多代码吗?下面是使用请求的同一个处理程序。它要短得多:

request.get(url, function(err, resp, data) {
  if (err) { return console.error(err); }
  console.log(data);
  res.render('index', { title: 'Express', data: data });
});
而且,由于YouTube正在返回JSON数据,您甚至可以让请求将数据解析为JavaScript对象。只需更改第一个参数,如下所示:

request.get({url: url, json: true}, function(err, resp, data) {
    ...
});
数据事件为每个区块触发一次