[英]Server in nodejs, http request
我是Node的新手。 我创建了一个简单的服务器。 想法是,在每次请求时,此服务器都会向Weather API发出http请求,并在获得答案后将答案发送给客户端。 我认为服务器发送答案的速度过快。 这是我的代码:
var http = require("http");
function getWeather()
{
var http2 = require("http");
http2.get("http://api.openweathermap.org/data/2.5/weather?lat=48.914348&lon=2.300282&appid=blabla123456&units=metric", (resp) => {
let data = '';
var answer = '-';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
answer += JSON.parse(data).name + ", " + JSON.parse(data).sys.country + "\n" +JSON.parse(data).main.temp + "C";
return(answer);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
function hi(){
return(5);
}
http.createServer(function (request, resp) {
resp.writeHead(200, {'Content-Type': 'text/plain'});
resp.end("Answer: " + hi() + " " + getWeather());
}).listen(8080);
console.log('Server running');
如您所见,函数getWeather返回答案,函数hi返回5。我的服务器响应为“ Answer:5未定义”,因此未显示getAnswer()返回,但是存在hi()返回。
在控制台中,答案打印在服务器的答案之后,这正是我想要显示的内容,但为时已晚。
希望你能帮助我解决这个问题:)
谢谢!
由于此事件需要花费时间来处理,因此您无法将其返回。 尝试改用回调!
function getWeather(callback)
{
var http2 = require("http");
http2.get("http://api.openweathermap.org/data/2.5/weather?lat=48.914348&lon=2.300282&appid=blabla123456&units=metric", (resp) => {
let data = '';
var answer = '-';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
answer += JSON.parse(data).name + ", " + JSON.parse(data).sys.country + "\n" +JSON.parse(data).main.temp + "C";
callback(answer);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
然后对于http请求
http.createServer(function (request, resp) {
resp.writeHead(200, {'Content-Type': 'text/plain'});
getWeather(function(data) {
resp.end("Answer: " + hi() + " " + data);
});
}).listen(8080);
如果您无法分辨,则可以通过调用在数据准备好后发送的函数来实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.