我正在开发一个nodejs webapp,但我遇到了问题。 我有一个twitter.js模块,它公开了一些在其他文件中使用的函数。 我的主要应用程序app.js正确导入它并可以使用这些功能。 问题是,如果我在另一个.js文件中导入它(通过var twitter = require(./twitter)方法),它不会加载,我可以通过console.log(twitter)看到,也因为它没有认识到这些功能。 如果app.js需要它,就会发生这种情况。我复制了twitter.js文件,并以不同的方式命名,如果我导入它有效。 我怎么解决这个问题? 感谢
编辑:添加一些代码
这是主app,app.js
viewDidDisappear
接下来是twitter.js文件:
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");
});
最后是mongo.js文件,用于mongo数据库
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});
});
}
所有这些文件都在同一个文件夹中。
答案 0 :(得分:0)
您已在mongo.js
&之间创建了循环依赖关系。 twitter.js
。
mongo.js
尝试加载twitter.js
,而mongo.js
则需要twitter
。那就是问题所在。删除此循环依赖项。
当您调用mongo.js
的函数时,也许可以将// 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();
});
});
}
对象作为参数传递。或者别的什么。
例如
mongo.js
var twitter = require(' ./ twitter');
{{1}}