2017-12-16 15 views
0

nodejs webappを開発していますが、問題があります。 他のファイルで使用するいくつかの関数を公開するtwitter.jsモジュールがあります。 メインアプリケーションのapp.jsが正しくインポートされ、関数を使用できます。 問題は、別の.jsファイル(var twitter = require(./ twitter)メソッド経由)に読み込んだら読み込まれないため、console.log(twitter)で見ることができます。機能を認識しません。 これは、app.jsに必要な場合に発生します。私はtwitter.jsファイルをコピーして別の名前をつけました。インポートした場合は動作します。 この問題を解決するにはどうすればよいですか? おかげnodejsでrequire()を使用してモジュールをインポートできません

EDIT:

var Twitter = require('twitter'); //import package 
var mongo = require("./mongo"); 

var T = new Twitter({ ---developer keys here --}) 

exports.getTrends = function(res){ 

    var params = { id: 23424853, count: 10} 
    T.get('trends/place',params,gotData); 

    function gotData(err,data,response){ 
     res.render('tweets',{ data: data[0], length: 10});} 
} 
exports.postTwit = function(value){ 
    T.post('statuses/update', {status:value}, function(error, tweet, response)  { 
    mongo.pushdata(tweet.id_str); 
     }); 
} 
exports.loadTwit = function(res,value){ 
var params = {id: value} 
T.get('statuses/show/', params, function (err, data, response) { 
    console.log(data); 
    res.render('db',{ data: data}); 
}); 
} 

、最終的にはモンゴ:いくつかのコード

これがメインのアプリでの追加は、

var express = require("express"); 
var bodyParser = require("body-parser"); 
var path = require("path"); 

var twitter = require("./twitter"); 
var mongo = require("./mongo"); 
var app = express(); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended:false})) 

app.use(express.static(path.join(__dirname,'public'))); 

app.set('view engine','ejs'); 
app.set('views',path.join(__dirname,'views')); 

app.get("/",function(req,res){ 
    res.render("index.ejs") 
}); 
app.get("/twitter",function(req,res){ 
    twitter.getTrends(res); 
}); 
app.post("/sendMessage",function(req,res){ 
    twitter.postTwit(req.body.valore); 
}); 
app.get("/pullData",function(req,res){ 
    mongo.pullData(res); 
}); 
app.listen(8080, function(){ 
    console.log("server started on 8080"); 
}); 

次はtwitter.jsファイルですapp.js .jsファイル、mongoデータベース用

var MongoClient = require('mongodb').MongoClient; 
var url = "mongodb://localhost:27017/mydb"; 
var twitter = require('./twitter'); 

exports.pushdata = function(value){ 
    MongoClient.connect(url, function(err, db) { 
    if (err) throw err; 
    var myobj = {id: value}; 
    db.collection("tweets").insertOne(myobj, function(err, res) { 
     if (err) throw err; 
     db.close(); 
    }); 
    }); 
} 
exports.pullData = function(res){ 
    MongoClient.connect(url, function(err, db) { 
    if (err) throw err; 
    db.collection("tweets").find({}).toArray(function(err, result) { 
    result.forEach(function(entry) { 
    twitter.loadTwit(res,entry); 
}); 
    db.close(); 

    }); 
}); 
} 

これらのファイルはすべて同じフォルダにあります。

+0

これをテキストの問題からコードの問題に変換できますか? – thebjorn

+0

構造をファイルし、ファイルコードをインポートするサンプルコードはありますか? – zabusa

+0

あなたのコードのサンプルであなたの質問に答える方がはるかに簡単です。 –

答えて

0

mongo.js & twitter.jsの間で循環依存関係を作成しました。

mongo.js試し読み込みtwitter.jsにはmongo.jsが必要です。それは問題です。この循環依存関係を削除します。

mongo.jsの関数を呼び出すときに、twitterオブジェクトをパラメータとして渡すことができます。または、他の何か。

mongo.js

VARさえずり=( './のさえずり')を必要とします。

// pass the twitter object as a parameter 
exports.pullData = function(twitter, res){ 
    MongoClient.connect(url, function(err, db) { 
    if (err) throw err; 
    db.collection("tweets").find({}).toArray(function(err, result) { 
    result.forEach(function(entry) { 
    twitter.loadTwit(res,entry); 
}); 
    db.close(); 

    }); 
}); 
} 
関連する問題