Javascript NodeJS http.request即使在';结束';事件

Javascript NodeJS http.request即使在';结束';事件,javascript,node.js,Javascript,Node.js,基本上,我试图从网站中删除一些数据,并对绑定到http.request的“end”事件的回调函数执行DOM提取、删除和更新 我也从'end'事件回调返回了数据,但它没有在我的路由回调函数中接收。我在那里得到了未定义的 下面是代码块: var scraper = { extractEmail: function (directoryName) { var result = getDirectory(directoryName); if (result !==

基本上,我试图从网站中删除一些数据,并对绑定到http.request的“end”事件的回调函数执行DOM提取、删除和更新

我也从
'end'
事件回调返回了数据,但它没有在我的路由回调函数中接收。我在那里得到了
未定义的

下面是代码块:

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

例如


route.js文件中是否也包含“var scraper”? 我猜不是,你无法访问另一个js文件, 为此,请使用module.exports

例如


不能从异步回调返回值。好吧,你可以,但它很可能会被忽视,而且肯定不会做你想做的事

在那个地方,你甚至不能兑现诺言。您只能在现在使用返回语句的情况下解析承诺。您需要从主函数返回一个承诺,然后在您现在使用返回的事件处理程序中解析或拒绝该承诺

有关更多信息,请参见以下答案:


不能从异步回调返回值。好吧,你可以,但它很可能会被忽视,而且肯定不会做你想做的事

在那个地方,你甚至不能兑现诺言。您只能在现在使用返回语句的情况下解析承诺。您需要从主函数返回一个承诺,然后在您现在使用返回的事件处理程序中解析或拒绝该承诺

有关更多信息,请参见以下答案:


最简单的修改就是将回调函数传递给
提取电子邮件
,以便在数据准备好后接收数据

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);
    });
});

最简单的修改就是将回调函数传递给
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);
    });
});

我也把它出口了。。我的完整代码块如下所示:
var-scraper={}
module.exports=scraper
。。但它不起作用。我也把它出口了。。我的完整代码块如下所示:
var-scraper={}
module.exports=scraper
。。但它不起作用。