Meteor应用程序仅在FireFox上崩溃

Meteor应用程序仅在FireFox上崩溃,firefox,meteor,Firefox,Meteor,我的Meteor应用程序在FireFox上运行时发生了4次此错误,第四个应用程序一定是导致其崩溃的应用程序,因为此函数在整个html模板中调用了大约30次 "Exception in template helper: @http://www.scr9.com:3000 /onepage.js?6b34dec0cc55de19e1c0ff682ac83dd9dce574d6:57:2 bindDataContext/<@http://www.scr9.com:3000/packages

我的Meteor应用程序在FireFox上运行时发生了4次此错误,第四个应用程序一定是导致其崩溃的应用程序,因为此函数在整个html模板中调用了大约30次

"Exception in template helper: @http://www.scr9.com:3000   /onepage.js?6b34dec0cc55de19e1c0ff682ac83dd9dce574d6:57:2
bindDataContext/<@http://www.scr9.com:3000/packages    /blaze.js?efa68f65e67544b5a05509804bf97e2c91ce75eb:2727:14
Blaze._wrapCatchingExceptions/<@http://www.scr9.com:3000/packages/blaze.js?efa68f65e67544b5a05509804bf97e2c91ce75eb:1606:14
Spacebars.call@http://www.scr9.com:3000/packages/spacebars.js?7f53771c84a2eafac2b561c9796dda0d8af8e7f5:171:12
Spacebars.mustacheImpl@http://www.scr9.com:3000/packages/spacebars.js?7f53771c84a2eafac2b561c9796dda0d8af8e7f5:108:10
Spacebars.mustache@http://www.scr9.com:3000/packages/spacebars.js?7f53771c84a2eafac2b561c9796dda0d8af8e7f5:112:16
Template.writeInvoice</</</<.value@http://www.scr9.com:3000/template.onepage.js?0b87a7326f8eda037de95427f14c078c4ab026ac:1005:18
Blaze._withCurrentView@http://www.scr9.com:3000/packages/blaze.js?efa68f65e67544b5a05509804bf97e2c91ce75eb:2043:12
.visitAttribute@http://www.scr9.com:3000/packages/blaze.js?efa68f65"[…]

当它第一次启动时,我还没有数据,所以函数只是接收str=0。你知道FF会发生什么吗?

这可能是因为两件事:

首先,正则表达式,特别是带有
/g
的正则表达式可能会导致bug,而不进行任何测试,我打赌这就是问题所在

第二,这里有很多强制操作,所以首先,在将
str
参数传递到函数之前,我会强制它成为一个数字。如果这是来自您的数据库,这应该很容易,因为您在数据进入之前对其进行了清理,对吗?对吧?

实现这两个功能&您的新功能如下所示:

Template.registerHelper("formatMoney", function(str) { 
  var formatOpts = {style: "currency", currency: "USD"};
  return str ? str.toLocaleString("en-US", formatOpts ) : "0.00";
});

您是否可以尝试通过将代码包装成丑陋的try/catch并记录异常来获取更多数据?我记得当我尝试在Firefox上调试奇怪的Blaze行为时,它帮了我的忙。好吧,我会把其中的一些放进去,看看它是否揭示了更多的东西。事实证明,这与函数本身无关。在
Tracker.autorun(函数()中){
在页面的后面,如果用户已登录,我会订阅所有集合,如果他们未登录,我会调用函数重置会话变量。该函数是在调用它的第一个位置之后定义的。这是FireFox不喜欢的。它从未订阅任何数据,因此从未定义任何值ed,如果问题无法正确回答,请将其删除=)使用我确实清理数据。当我第一次开始此操作时,我经常将我的数字保存为字符串,这就是为什么我在其中保存这些数字。一旦我可以回到我的服务器上,我将尝试您的解决方案。最后,我启动并运行了一个新服务器。我用您的代码替换了helper函数,现在我收到了此错误-spawn enomem如果更改该helper函数导致这是一个
ENOMEM
那么你在服务器和/或客户端上执行helper函数,这是不好的…我在
if(Meteor.isClient)之前的myapp/myapp.js中有它{
。所有服务器代码都在/server文件夹中。虽然出现了一个新的错误-lib/node_modules/fibers/future.js:173就是它现在崩溃的地方。我怀疑这是因为我在新服务器上安装它时升级到了所有新包。我会修复这个错误,然后重试代码:)
Template.registerHelper("formatMoney", function(str) { 
  var formatOpts = {style: "currency", currency: "USD"};
  return str ? str.toLocaleString("en-US", formatOpts ) : "0.00";
});