从 Node.js 中的网页检索内容



诚然,我是一个完全的菜鸟.js。 我正在尝试做一些看似简单但似乎不起作用的事情。 我正在使用请求 npm 模块从网页中检索内容。 然后我想稍后在程序中使用该内容,但似乎无法返回从请求中检索的数据或将其作为字符串存储在变量中,因为该变量稍后将在程序中超出范围。

正如您在下面看到的,我正在向一个页面提出请求。 URL 只是一堆文本,但我计划将其解析为 JSON 数据,以便稍后用于初始化对象。 对象初始化需要一个字符串作为其输入。 但是我不知道如何在请求中的函数的请求范围之外使用该数据。

任何指导将不胜感激。

var request = require('request');
stateString = '';

function getState() {
request('http://content.warframe.com/dynamic/worldState.php', function (error, response, body) {
stateString = body;
});   
}
getState();
console.log(stateString);

正如OwChallie在评论中提到的,请求是异步发送的。换句话说,console.log在请求完成之前执行。

您可以通过将回调传递给getState()函数或查看 Promise 来解决此问题。对于这样的基本示例,带有的回调就可以了。但是,一旦代码中的逻辑变得更加复杂,我强烈建议您研究 Promise 以使您的代码易于管理。

例:

var request = require('request');
var url = "http://content.warframe.com/dynamic/worldState.php";
function getStateUsingCallback(callback) {
request(url, function (error, response, body) {
callback(body);
});
}
function getStateUsingPromise() {
return new Promise(function (resolve, reject) {
request(url, function (error, response, body) {
if (error) return reject(error);
return resolve(body);
});
})
}
// Option 1: Using a callback
getStateUsingCallback(function(body) {
console.log(body);
});
// Option 2: Using a Promise
getStateUsingPromise()
.then(function (body) {
console.log(body);
})
.catch(function (error) {
console.error(error);
});

或者,您可以强制同步运行请求。因此,在运行最后一行之前,该函数已完全执行。但是,我强烈建议您开始掌握编写和处理异步代码的窍门,因为这就是 Node.js 的强大之处!

最新更新