我看过这个问题的帖子,但并不真正理解其中的解释。我对meteor和做这个项目都是新手。据我所知,node的一些功能在浏览器中不可用,但我不确定如何解决这个问题。我试图将代码包装在某个函数(窗口)中,但仍然无法使其正常工作。我也尝试过使用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.发布于 2014-06-10 03:40:11
看起来你可能没有正确构建你的应用程序。您有打算在客户端/浏览器端运行的代码,该代码在服务器端运行。
在你的应用中:
有关这方面的更多详细信息,请参阅meteor文档:http://docs.meteor.com/#structuringyourapp
发布于 2017-02-01 04:43:20
ReferenceError是节点错误。Meteor是Node之上的一个框架。
Node有一个全局作用域(也称为Node的global变量)。如果您尝试访问未定义的全局变量,则会抛出此错误。
浏览器还有一个称为window的全局作用域,并且在访问未定义的变量时不会抛出ReferenceErrors。
下面是我喜欢的一种模式,用于向类添加功能(这很像Meteor):
/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“。(节点知道将帮助器指定为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中第一次覆盖它,并寻找运行时错误,如果有任何东西被覆盖。
如果你有一个方便的跨浏览器语法,请评论:-)
发布于 2017-01-25 18:01:57
我认为您正在调用一个加载到客户端和服务器上的方法。
您可以像这样在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)
}当您在客户端和服务器中加载方法时,就会发生这种情况。
https://stackoverflow.com/questions/24126898
复制相似问题