Javascript ExpressJs视图中的变量不完整
好吧,我是Nodejs的新手,只是在玩它。我试图将一些简单的python代码转换为js。我向Youtube API发送get请求,API返回50个json格式的结果。 我的express设置是全新的。使用ejs、手写笔和无会话。 这是我的index.js代码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/
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) {
...
});
数据事件为每个区块触发一次