Javascript 未定义MeteorJS集合

Javascript 未定义MeteorJS集合,javascript,node.js,meteor,npm,Javascript,Node.js,Meteor,Npm,superpack是使用\u wrapAsync扭曲的npm包。为什么插入到集合UserSession会导致错误,指出集合未定义 服务器/助手/b.js // Init var SUPERPACK = Meteor.require('superpack'); var superpack = SUPERPACK(a,b); // Get Info superpack.getInfoSync = Meteor._wrapAsync(superpack.getInfo.bind(superpack)

superpack
是使用
\u wrapAsync
扭曲的npm包。为什么插入到集合
UserSession
会导致错误,指出集合未定义

服务器/助手/b.js

// Init
var SUPERPACK = Meteor.require('superpack');
var superpack = SUPERPACK(a,b);

// Get Info
superpack.getInfoSync = Meteor._wrapAsync(superpack.getInfo.bind(superpack));
var data = superpack.getInfoSync();

UserSession.insert({
    'account': data
});
UserSession = new Meteor.Collection('user_sessions');
collections/UserSession.js

// Init
var SUPERPACK = Meteor.require('superpack');
var superpack = SUPERPACK(a,b);

// Get Info
superpack.getInfoSync = Meteor._wrapAsync(superpack.getInfo.bind(superpack));
var data = superpack.getInfoSync();

UserSession.insert({
    'account': data
});
UserSession = new Meteor.Collection('user_sessions');
错误(服务器端):

ReferenceError: UserSession is not defined

使用的是Meter v0.6.6.3。

您必须小心文件加载顺序。首先加载深度嵌套的文件(请参阅meteor文档中的结构化应用程序)

因此,您的助手将在集合之前加载。通常情况下,这是可以的,但它看起来像是在Meteor启动时插入文档(即,当尚未加载所有文件时)


我认为您可能必须将任务放在Meteor.startup(function(){..})中,Meteor启动时运行,唯一的区别是它在加载所有文件后运行。

@Tarang
b.js
中的代码应该在服务器启动时运行。尝试了你的建议,将其放入Meteor.startup中,效果很好!