我正在尝试学习node.js,目前我只是试图将内容打印出响应。我正在从NHL api获取团队花名册,并且我可以console.log它并获取数据。但是,当我尝试调用该函数到response.write时,该变量为空。
这是tutorial.js。正是gt.getTeam(team)返回一个空字符串(如下所示,来自“ my_hockey_team.js”的变量“ players”)。
var http = require("http");
var gt = require("./my_hockey_team");
let team = process.argv.slice(2);
console.log(team[0]);
http.createServer(function (request, response){
response.writeHead(200, {'Content-Type': 'text/html'});
response.write("Players are" + gt.getTeam(team[0]));
console.log(gt.getTeam(team[0]));
response.end("Hello World");
}).listen(3000);
console.log("Server running at 127.0.0.1");
process.on('uncaughtException', function (err) {
console.log(err);
});
这是my_hockey_team.js。在getTeam函数内部,永远不会填充“玩家”变量。我不知道它是异步的东西还是作用域的东西或它是什么。
const https = require ('https');
var http = require("http");
function getTeam(teamNr){
let players = "";
const request = https.get(`https://statsapi.web.nhl.com/api/v1/teams/${teamNr}/roster`, response => {
let body = "";
if (response.statusCode !== 200){
request.abort();
}
response.on('data', data => {
body += data;
});
response.on('end', () => {
if (response.statusCode === 200){
try {
const team = JSON.parse(body);
for (var i in team.roster){
players += team.roster[i].person.fullName;
}
} catch(error) {
console.log(error.message);
}
}
});
});
request.on('error', error => {
console.error(error.message + "Nåt gick fel med lagen?");
});
return players;
}
module.exports.getTeam = getTeam;
如果我取消对respons.on('end ..)内部的console.log的注释,我会获取所有想要的数据,但是当我调用getTeam函数时,'players'变量只是一个空字符串。有人可以告诉我我在做什么错。 谢谢!
答案 0 :(得分:0)
getTeam
需要是一个异步函数,返回一个Promise,或者(如果您使用的是Node的旧版本)进行回调,然后您的调用代码需要适当地处理它。现在,该方法似乎正确设置了所有异步响应处理,然后在实际发生任何操作之前返回初始化后的players
。