即使在指定'结束'事件返回之后,NodeJS http.request也不会返回数据
基本上我试图从网站上http.request
一些数据,并在绑定到http.request
的'end'事件的回调函数上执行DOM提取,删除和更新。
我也从'end'
事件回调中返回了数据,但它没有在我的路由回调函数中接收。 我在那里弄undefined
明白。
以下是代码块:
var scraper = {
extractEmail: function (directoryName) {
var result = getDirectory(directoryName);
if (result !== 404) {
var protocol = result.https ? https : http;
protocol.request({
host: 'somevalue.net',
method: "GET"
}, function (res) {
var data = '';
res.on('data', function (chunk) {
data += chunk;
});
res.on('end', function () {
return data;
});
})
.on('error', function (err) {
return err;
})
.end();
//return data;
}
else {
//return "Failed";
}
}
};
这里是Routes.js函数:
app.get('/:directory', function (req, res) {
var n = scraper.extractEmail(req.params.directory);
console.log(n);
res.send(n);
});
在这里,我也没有得到n
的价值。
你的'var scraper'也在route.js文件中吗? 我想这不是,你无法访问其他js文件,因为这样做使用module.exports。
例如。
// module.js
var name = "foobar";
// export it
exports.name = name;
Then, in route.js...
> //route.js
> // get a reference to your required module
> var myModule = require('./module');
> //correct path to folder where your above file is
> // name is a member of myModule due to the export above
> var name = myModule.name;
您不能从异步回调中返回值。 那么,你可以,但它很可能会被忽略,而且肯定不会做你想要的。
你甚至无法在那个地方回复承诺。 您现在只能使用return语句解决承诺。 您需要从主函数返回一个承诺,然后解决或拒绝您现在使用的返回事件处理程序中的承诺。
有关更多信息,请参阅以下答案
做这个工作的最简单的修改是通过一个回调函数来extractEmail
,一旦它准备好就接收数据。
var scraper = {
extractEmail: function (directoryName, cb) {
var result = getDirectory(directoryName);
if (result !== 404) {
var protocol = result.https ? https : http;
protocol.request({
host: 'somevalue.net',
method: "GET"
}, function (res) {
var data = '';
res.on('data', function (chunk) {
data += chunk;
});
res.on('end', function () {
cb(null, data);
});
})
.on('error', function (err) {
cb(err);
})
.end();
}
else {
cb(new Error('Failed'));
}
}
};
并像这样使用它:
app.get('/:directory', function (req, res) {
scraper.extractEmail(req.params.directory, function(err, n) {
if (err) return console.error(err);
console.log(n);
res.send(n);
});
});
链接地址: http://www.djcxy.com/p/55377.html
上一篇: NodeJS http.request not returning data even after specifying return on the 'end' event