我已经看到这个问题已经发布但是并没有真正理解这些解释。我是meteor的新手,正在做这个项目。根据我的理解,浏览器中没有节点的某些功能,但我不确定如何解决问题。我试图在一些函数(窗口)中包装代码,但仍然无法使其工作。我也试过使用npm,但是因为一些非法令牌的错误而空洞。谢谢你的帮助。
您的应用崩溃了。这是最新的日志。
/home/alex/TacticsTrainer2/.meteor/local/build/programs/server/boot.js:186
}).run();
^
ReferenceError: window is not defined
at app/js/bootstrap.min.js:6:353
at app/js/bootstrap.min.js:8:3
at /home/alex/TacticsTrainer2/.meteor/local/build/programs/server/boot.js:155:10
at Array.forEach (native)
at Function._.each._.forEach (/home/alex/.meteor/tools/5bf1690853/lib/node_modules /underscore/underscore.js:79:11)
at /home/alex/TacticsTrainer2/.meteor/local/build/programs/server/boot.js:82:5
=> Exited with code: 8
=> Your application is crashing. Waiting for file change.
答案 0 :(得分:1)
看起来您可能没有正确构建您的应用。您的代码旨在在服务器端运行的客户端/浏览器端运行。
在你的应用中:
有关详细信息,请参阅meteor docs:http://docs.meteor.com/#structuringyourapp
答案 1 :(得分:0)
ReferenceError是Node错误。 Meteor是Node之上的框架。
Node具有全局范围(又名Node的global
变量)。 如果您尝试访问未定义的全局变量,则Node(而不是Meteor)会抛出此错误。
浏览器还有一个名为window
的全局范围,并且在访问未定义的变量时不会抛出ReferenceErrors。
这是我喜欢为类添加功能的模式(它是非常流星):
/lib/Helpers.js <-- Helpers for everyone (node+browser)
/server/Helpers.js <-- Server helpers (node)
/client/Helpers.js <-- Client helpers (browser)
考虑以下实施:
// /lib/Helpers.js
Helpers = {/* functions */}; // Assigned to window.Helpers and global.Helpers
// /server/Helpers.js
Helpers = _.extend(Helpers, {/*more functions*/}
// /client/Helpers.js
Helpers = _.extend(Helpers, {/*more functions*/}
这是一个微不足道的例子。如果我不想担心加载顺序怎么办?为什么不在/lib/Helpers.js中使用_.extend()?
// /lib/Helpers.js
// Helpers = {/* functions */}; // Overwrites...
Helpers = _.extend(Helpers, {/* functions */}); // ReferenceError
因为如果未定义Helpers,您将从Node获取ReferenceError - 特别是用作参数的“Helpers”。 (Node知道将Helpers指定为global.Helpers)。
以下两种“修复”方法:
1)将助手分配给某事
// /lib/Helpers.js
if (typeof Helpers === 'undefined') Helpers = {};
Helpers = _.extend(Helpers, {/* functions */});
2)使用全球
中的助手// /lib/Helpers.js
Helpers = _.extend(global.Helpers, {/* functions */}); // works in node, but...
两者都很糟糕。
1)语法太可怕了 2)在节点中工作,但浏览器中没有全局。所以它没有达到目的。所以我放弃了,并在lib中第一次重写它,并在任何被覆盖的情况下寻找运行时错误。
如果你有一个方便的跨浏览器语法,请做评论: - )
答案 2 :(得分:-1)
我认为您正在调用在客户端和服务器上加载的方法。
您可以在Meteor.method中编写代码,如下所示:
if (!this.isSimulation) {
// code with node js that should only run in the server
} else {
// code that doesn't have nodejs runtime (browser)
}
当您在客户端和服务器中加载Method时会发生这种情况。