使用 npm 包请求处理成功事件
Handle on success event with npm package request
我有一个 node.js 应用程序可以从网站上抓取信息。我正在使用 npm packages request 和 cheerio 并且抓取工作正常但我想在请求功能完成后做其他事情。这是一些代码:
app.js
var express = require('express');
var extractor = require("./extractor");
console.log(extractor('http://www.example.com'));
var app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');
});
app.listen(3000);
extractor.js(所有的乐趣)
var request = require('request');
var cheerio = require('cheerio');
var Extractor = function(url) {
var games = [];
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('tr.game').each(function(i, v){
var game = { /* many attributes */ };
games.push(game);
});
}
});
this.extractedGames = games;
};
module.exports = function(url) {
return new Extractor(url);
};
最终当我 运行 它显示 { extractedGames: [] }
那是因为输出是在请求处理结束之前打印的。所以我想在请求作业结束时向 extracedGames 属性添加一个 on success 事件。
谢谢
自己解决了!我希望这可以帮助将来的人(虽然我觉得自己是个十足的菜鸟)
诀窍是发出一个事件并稍后处理它。
var express = require('express');
var extractor = require("./extractor");
extractor('http://www.example.com');
var app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');
});
app.listen(3000);
我删除了 console.log(extractor('http://www.example.com'))
,因为这会在请求作业完成之前 运行。所以我把它移到了事件处理函数中。
var request = require('request');
var cheerio = require('cheerio');
var Emitter = require('events').EventEmitter;
var extractEmitter = new Emitter();
extractEmitter.on('extracted', function(extractedGames){
console.log(extractedGames);
});
var Extractor = function(url) {
var games = [];
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('tr.game').each(function(i, v){
var game = { /* many attributes */ };
games.push(game);
});
extractEmitter.emit('extracted', games);
}
});
this.extractedGames = games;
};
module.exports = function(url) {
return new Extractor(url);
};
我有一个 node.js 应用程序可以从网站上抓取信息。我正在使用 npm packages request 和 cheerio 并且抓取工作正常但我想在请求功能完成后做其他事情。这是一些代码:
app.js
var express = require('express');
var extractor = require("./extractor");
console.log(extractor('http://www.example.com'));
var app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');
});
app.listen(3000);
extractor.js(所有的乐趣)
var request = require('request');
var cheerio = require('cheerio');
var Extractor = function(url) {
var games = [];
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('tr.game').each(function(i, v){
var game = { /* many attributes */ };
games.push(game);
});
}
});
this.extractedGames = games;
};
module.exports = function(url) {
return new Extractor(url);
};
最终当我 运行 它显示 { extractedGames: [] }
那是因为输出是在请求处理结束之前打印的。所以我想在请求作业结束时向 extracedGames 属性添加一个 on success 事件。
谢谢
自己解决了!我希望这可以帮助将来的人(虽然我觉得自己是个十足的菜鸟)
诀窍是发出一个事件并稍后处理它。
var express = require('express');
var extractor = require("./extractor");
extractor('http://www.example.com');
var app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');
});
app.listen(3000);
我删除了 console.log(extractor('http://www.example.com'))
,因为这会在请求作业完成之前 运行。所以我把它移到了事件处理函数中。
var request = require('request');
var cheerio = require('cheerio');
var Emitter = require('events').EventEmitter;
var extractEmitter = new Emitter();
extractEmitter.on('extracted', function(extractedGames){
console.log(extractedGames);
});
var Extractor = function(url) {
var games = [];
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('tr.game').each(function(i, v){
var game = { /* many attributes */ };
games.push(game);
});
extractEmitter.emit('extracted', games);
}
});
this.extractedGames = games;
};
module.exports = function(url) {
return new Extractor(url);
};