我必须使用nodejs检索页面的页面源,但我想要检索的页面并不总是相同。
我有2个正在监听的文件server.js,当他收到A连接时,他调用了load.js来回复未定义页面的源代码,我的代码就是:
server.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)询问第二个文件以从第二个文件中检索页面源,但是我想要获取源的页面可能会发生变化并不总是相同的..
答案 0 :(得分:0)
在你的第二个文件中(我假设那是一个名为loadFb.js
的文件),你想要导出一个函数,而不是立即调用代码。
节点缓存其模块,因此当您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);
});
这样,您可以使用不同的路径多次执行模块代码。