【发布时间】:2018-08-25 23:13:17
【问题描述】:
我使用 node.js 只是为了运行计划任务并使用 GET 请求。我将粘贴一些代码来显示我想要做的事情,尽管由于一个明显的原因它不起作用:
const http = require("http");
const request = require("request");
http.createServer(function (req, res) {
res.writeHead(200, {"Content-Type": "text/html"});
res.write("Hello, World!");
let a = getRequest();
console.log(a);
res.end();
}).listen(8080);
function getRequest() {
let b;
request("http://www.google.com", function(err, res, body) {
b = body;
})
return b;
}
因此,由于请求是异步的,因此正文中的 b 不起作用,这使得 b 在最终打印时未定义。我知道应该使用这些回调函数的方式是保持回调函数的链接,因为这是唯一可以访问body 内容的地方。但是,我不想继续链接函数,因为它完全破坏了程序的结构。我想将所有节点服务器命令保留在 http.createServer 块内。我不想将它们放在从回调函数内部调用的函数中。在这个例子中,异步进程没有任何意义,因为无论如何只有 1 个 get 请求,并且在收到它之前无法在 console.log 中显示。
我只需要一种简单的方法来使用 get 请求抓取数据。完美的是,如果我有一些功能可以提供一堆链接,它从它们获取原始 html,然后它等待它们全部完成,以便我可以处理所有数据一次。
如何在 Node.js 中实现这样的功能?
【问题讨论】:
-
不完全确定您想要什么。展示你如何通过链接解决这个问题,然后也许有人可以告诉你如何改进它。
-
例如,
console.log(b)在回调函数内部有效,但console.log(a)只是返回 undefined,因为它在函数外部。解决这个问题的方法是在回调函数中移动console.log和res.end。
标签: javascript node.js get