从节点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
。 而且你需要检查你的代码,记住这一点,因为我看到相同的修复应该在另一个文件中,所以也许有一些类似的地方。
- 在使用nodejs passport来集成第三方平台时,发生InternalOAuthError
- 使用facebook-node-sdk模块/(#324)上传照片需要上传文件
- FacebookGraphAPIError:(#100)尝试访问节点types(用户)上的不存在字段(user_photos)
- 没有'Access-Control-Allow-Origin'标题问题与hapijs
- 通过Nodejs的TLS套接字连接
- 尝试通过node.js http POST到“graph.facebook.com”时,发生“读取ECONNRESET”错误
- 如何在没有会话的Facebook Passport之后redirect到之前的URL
- 如何在React Native中启用Android监视器来检查日志?
- Passport.js:passport-facebook-token策略,通过JS SDKlogin,然后validation护照?