从节点js调用另一个文件

我有一个名为node.js的文件:

var net = require('net'); var crypto = require('crypto'); //sjcl var sjcl = require('./sjcl'); //retrive fb profile var loadFb = require('./loadFb.js'); var loadFeed = require('./loadFeed.js'); //read json user file var fs = require('fs'); var text = fs.readFileSync(__dirname + '/users','utf8'); var HOST = 'localhost'; var PORT = 7000; net.createServer(function(sock) { // We have a connection - a socket object 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); //var date = (data.toString()).split("***"); //var from = date[1]; loadFb(extendetPath, function(pageData) { loadFeed(extendetPath2, function(pageData2) { var fs = require('fs'); var profileText = fs.readFileSync('/tmp/profile','utf8'); console.log(profileText); sock.write(profileText); }); }); }); // Add a 'close' event handler to this instance of socket sock.on('close', function(data) { console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort); }); }).listen(PORT); console.log('Server listening on ' + HOST +':'+ PORT); function returnKeyFromUser(id) { //text var trovata = false; var dati = JSON.parse(text); for(var i=0; i<dati.friendlist.friend.length && trovata==false; i++) { var user = (dati.friendlist.friend[i].username).replace("\n",""); var userID = (id).replace("\n",""); if(user==userID) { trovata=true; return ((dati.friendlist.friend[i].publicKey).toString()).replace("\n",""); } } if(trovata==false) return null; } 

有一个小的HTTP服务器接收Facebook的用户名,他要做的是检索2页:

一个与configuration文件信息graphapi和一个Facebook的configuration文件的饲料信息graphapi我复制其他两个文件:

 var https = require('https'); module.exports = function(path, callback) { var options = { host: 'graph.facebook.com', port: 443, path: (path.toString()).replace("\n",""), method: 'GET' }; var req = https.get(options, function(res) { var pageData = ""; if((path.toString()).indexOf("/")==0 && (path.toString()).indexOf("/GET /`HTTP/")!=0) //for load only (I hope facebook profile) { console.log(options); res.setEncoding('utf8'); res.on('data', function (chunk) { pageData += chunk; }); res.on('end', function() { var fs = require('fs'); fs.writeFile("/tmp/profile", pageData, function(err) { if(err) { console.log(err); } else { console.log("The file was saved!"); } }); //callback(pageData); return; }); } }); }; 

3°文件

 var https = require('https'); module.exports = function(path, callback) { var options = { host: 'graph.facebook.com', port: 443, path: (path.toString()).replace("\n",""), method: 'GET' }; var req = https.get(options, function(res) { var pageData = ""; if((path.toString()).indexOf("/")==0 && (path.toString()).indexOf("/GET / HTTP/")!=0) //for load only (I hope facebook profile) { console.log(options); res.setEncoding('utf8'); res.on('data', function (chunk) { pageData += chunk; }); res.on('end', function() { var fs = require('fs'); fs.appendFile('/tmp/profile', "***"+pageData, function (err) { if (err) throw err; console.log('It\'s saved!'); }); callback(pageData); }); } }); }; 

我不知道如果有一种方法可以在第一个文件node.js中调用这两个文件,但我所做的是这样的:(从node.js调用第一个文件,并从第二个文件调用第三个文件) node.js文件我用这个命令调用第一个文件loadFb.js:

 loadFb(extendetPath, function(pageData) { 

这个调用将一个文件保存在我的tmpconfiguration文件目录中,并在里面我调用另一个文件loadFeed来追加一些文本。

之后,我必须将整个信息发送给客户,但我有一个错误。 为了nodejs正确地调用loadFb并写入tmp-profile,比他调用loadFeed要多,但是在附加信息之前,节点只回收一半我需要的信息给客户端。 我不是一个好的nodejs程序员,这是我论文的一个工作。 有人能帮我吗?

我们来看下面的代码:

  res.on('end', function() { var fs = require('fs'); fs.appendFile('/tmp/profile', "***"+pageData, function (err) { if (err) throw err; console.log('It\'s saved!'); }); callback(pageData); }); 

它做什么运行asynchronous方法appendFile并立即调用callback 。 所以当callback中的代码被执行时,文件还没有被更新。 你需要移动callback(pageData);appendFile的callbackappendFile 。 而且你需要检查你的代码,记住这一点,因为我看到相同的修复应该在另一个文件中,所以也许有一些类似的地方。