首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReferenceError,流星

ReferenceError,流星
EN

Stack Overflow用户
提问于 2014-06-10 02:50:33
回答 3查看 2.1K关注 0票数 1

我看过这个问题的帖子,但并不真正理解其中的解释。我对meteor和做这个项目都是新手。据我所知,node的一些功能在浏览器中不可用,但我不确定如何解决这个问题。我试图将代码包装在某个函数(窗口)中,但仍然无法使其正常工作。我也尝试过使用npm,但出现了一些关于非法令牌的错误。谢谢你的帮助。

你的应用程序崩溃了。这是最新的日志。

代码语言:javascript
复制
/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.
EN

回答 3

Stack Overflow用户

发布于 2014-06-10 03:40:11

看起来你可能没有正确构建你的应用程序。您有打算在客户端/浏览器端运行的代码,该代码在服务器端运行。

在你的应用中:

  • 将所有要在客户端运行的代码放在 /client 目录中
  • 将所有服务器端代码放在 /server 目录中
  • 将要在服务器和客户端上运行的代码放在根文件夹或非保留名称(公共、私有、测试、服务器或客户端)中

有关这方面的更多详细信息,请参阅meteor文档:http://docs.meteor.com/#structuringyourapp

票数 1
EN

Stack Overflow用户

发布于 2017-02-01 04:43:20

ReferenceError是节点错误。Meteor是Node之上的一个框架。

Node有一个全局作用域(也称为Node的global变量)。如果您尝试访问未定义的全局变量,则会抛出此错误。

浏览器还有一个称为window的全局作用域,并且在访问未定义的变量时不会抛出ReferenceErrors。

下面是我喜欢的一种模式,用于向类添加功能(这很像Meteor):

代码语言:javascript
复制
/lib/Helpers.js      <-- Helpers for everyone (node+browser)
/server/Helpers.js   <-- Server helpers (node)
/client/Helpers.js   <-- Client helpers (browser)

考虑以下实现:

代码语言:javascript
复制
// /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()呢?

代码语言:javascript
复制
// /lib/Helpers.js
// Helpers = {/* functions */};                  // Overwrites...
Helpers = _.extend(Helpers, {/* functions */});  // ReferenceError

因为如果Helpers没有定义,你会从Node得到一个ReferenceError --特别是作为参数使用的"Helpers“。(节点知道将帮助器指定为global.Helpers)。

这里有两种“修复”这个问题的方法:

1)将帮助器分配给某个对象

代码语言:javascript
复制
// /lib/Helpers.js
if (typeof Helpers === 'undefined') Helpers = {};
Helpers = _.extend(Helpers, {/* functions */});

2)使用全局

代码语言:javascript
复制
// /lib/Helpers.js
Helpers = _.extend(global.Helpers, {/* functions */});  // works in node, but...

这两个都很烂。

1)的语法很糟糕。

2)在节点工作,但在浏览器中没有全局。所以它没有达到它的目的。

所以我放弃了,回到lib中第一次覆盖它,并寻找运行时错误,如果有任何东西被覆盖。

如果你有一个方便的跨浏览器语法,请评论:-)

票数 0
EN

Stack Overflow用户

发布于 2017-01-25 18:01:57

我认为您正在调用一个加载到客户端和服务器上的方法。

您可以像这样在Meteor.method中编写代码:

代码语言:javascript
复制
if (!this.isSimulation) {
    // code with node js that should only run in the server
} else {
    // code that doesn't have nodejs runtime (browser)
}

当您在客户端和服务器中加载方法时,就会发生这种情况。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24126898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档