当我将我的应用程序部署到流星云服务器上时,我一直遇到此错误。
流星代码必须始终在光纤内运行 在_.extend.get(app / packages / meteor / dynamics_nodejs.js:14:13) 在_.extend.apply(app / packages / livedata / livedata_server.js:1268:57) 在_.extend.call(app / packages / livedata / livedata_server.js:1229:17) 在Meteor.startup.Meteor.methods.streamTwit(app / server / server.js:50:24)
然而,我已经包裹在Fibers中
streamTwit: function (twit){
var userid = '1527228696';
twit.stream(
'statuses/filter',
{ follow: userid},
function(stream) {
stream.on('data', function(tweet) {
Fiber(function(){
if(tweet.user.id_str === userid)
{
Meteor.call('addQn', tweet);
}
}).run();
console.log(tweet);
console.log('---------------------------------------------------------');
console.log(tweet.user.screen_name);
console.log(tweet.user.name);
console.log(tweet.text);
});
}
);
}
我不知道是什么原因,但有人建议我应该用Meteor.bindEnvironment包装它。因此,我这样做了:
streamTwit: function (twit){
this.unblock(); // this doesn't seem to work
console.log('... ... trackTweets');
var _this = this;
var userid = '1527228696';
twit.stream(
'statuses/filter',
{ follow: userid},
function(stream) {
stream.on('data', function(tweet) {
Meteor.bindEnvironment(function () {
if(tweet.user.id_str === userid)
{
Meteor.call('addQn', tweet);
}
}, function(e) {
Meteor._debug("Exception from connection close callback:", e);
});
console.log(tweet);
console.log('---------------------------------------------------------');
console.log(tweet.user.screen_name);
console.log(tweet.user.name);
console.log(tweet.text);
});
}
);
}
//添加问题方法
addQn:function(tweet){
questionDB.insert({'tweet': tweet, 'date': new Date()});
}
但现在它甚至都不起作用。我意识到这只发生在我试图将一些数据插入mongodb时。 我可以知道我的代码有什么问题吗?谢谢! 所有这些代码都是用app / server / server.js
编写的答案 0 :(得分:0)
您不应该在服务器端使用Meteor.call
。这仅适用于客户端代码。只需直接或更好地调用addQn
,内联它,因为它只是一行代码。