使用 Node js 从另一个文件调用两个文件
call two file from another with node 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个页面:
包含个人资料信息的 GraphAPI,以及包含 Facebook 个人资料提要信息的 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);
});
}
});
};
我不知道是否有办法在第一个文件节点中调用两个文件.js但我所做的是这样的:(从节点调用.js第一个文件,从第二个文件调用第三个文件)在 node.js 文件中,我用以下命令调用第一个文件 loadFb.js:
loadFb(extendetPath, function(pageData)
{
此调用将一个文件保存在我的 tmp 配置文件目录中,并在内部调用另一个附加一些文本的文件 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);
});
它的作用是appendFile
运行异步方法,然后立即调用callback
。因此,当执行回调中的代码时,文件尚未更新。您需要将callback(pageData);
移动到appendFile
的回调中。您需要在牢记这一点的情况下查看代码,因为我看到应该在另一个文件中进行相同的修复,因此可能也有一些类似的地方。
相关文章:
- 加载两个具有相同父密钥名称的json文件
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- 为什么jQuery文件的函数中有两个参数,但只接收一个参数
- jPlayer播放两个媒体文件
- 如何在Famo.us中的两个视图(不同的js文件)之间进行通信
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 如何在不必维护每个文件的两个版本的情况下,将通用JavaScript和映像部署到两个不同的EAR
- 使用AddThis-config-data_ga_property向两个Google Analytics配置文件报告
- 我可以在两个javascript文件之间传递一个字符串吗?
- 两个用户如何协作编辑 JSON 文件
- 如何使用HTML5和Javascript同时读取两个文本文件
- 为什么不是'当试图使用Ajax和外部PHP文件发布内容时,我的表单工作不正常,该文件接收两个字符串
- 使用ng repeat从两个不同的JSON文件中提取数据
- 在两个解决方案中引用通用的Javascript文件
- 如何手动绑定两个javascript文件
- 如何使用WebRTC在两个浏览器之间传输文件
- Javascript无法识别两个不同的PDF文件
- 在同一命名空间中保留两个独立的javascript文件/代码段
- 如何使用grunt durandal输出两个文件
- 在一个函数中使用来自两个单独 JSON 文件的数据