0

我必须使用 nodejs 检索页面的页面源,但我要检索的页面并不总是相同的。

我有 2 个正在监听的文件 server.js,当他收到 A 连接时,他调用 load.js 来检索未定义页面的源,我的代码是这样的:

服务器.js

var net = require('net');

var loadFb = require('./load.js');


var HOST = 'localhost';
var PORT = 9051;


// Create a server instance, and chain the listen function to it
// The function passed to net.createServer() becomes the event handler for the 'connection' event
// The sock object the callback function receives UNIQUE for each connection


net.createServer(function(sock) {

    // We have a connection - a socket object is assigned to the connection automatically
    console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);

    // Add a 'data' event handler to this instance of socket
    sock.on('data', function(data) {

        console.log('User request profile of: ' + data);
        // Write the data back to the socket, the client will receive it as data from the server


        //here I have to call test.js 

        //how


        sock.write(data);     
    });

    // Add a 'close' event handler to this instance of socket
    sock.on('close', function(data) {
        console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
    });

}).listen(PORT, HOST);


console.log('Server listening on ' + HOST +':'+ PORT);

另一个文件是这样的:

 var https = require('https');


 var options = {
    host: 'graph.facebook.com',
    port: 443,
    path: '/dario.vettore',
    method: 'GET'
  };

  var req = https.get(options, function(res) {
    var pageData = "";
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
      pageData += chunk;
      //console.log(pageData);
      return pageData;
    });

    res.on('end', function(){
      //response.send(pageData)
    });
  });

我如何从第一个文件(server.js)询问第二个文件以从第二个文件中检索页面源,但是我想要获取源的页面可以更改并不总是相同的..

4

1 回答 1

0

在您的第二个文件(我假设那是名为 的文件loadFb.js)中,您想要导出一个函数,而不是立即调用代码。

Node 缓存它的模块,所以当你使用require()它们时,代码只运行一次。

第二个文件应如下所示:

var https = require('https');

module.exports = function(path, callback) {
  var options = {
    host: 'graph.facebook.com',
    port: 443,
    path: path,
    method: 'GET'
  };

  var req = https.get(options, function(res) {
    var pageData = "";
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
      pageData += chunk;
    });
    res.on('end', function(){
      callback(pageData);
    });
  });
};

然后在您的第一个文件中,您可以像这样访问它:

loadJs('/dario.vettore', function(pageData) {
  console.log(pageData);
});

这样,您可以使用不同的路径多次执行模块代码。

于 2013-09-07T15:04:05.650 回答