开发者问题收集

Meteor:未捕获的 RangeError:超出最大调用堆栈大小

2017-02-21
5663

我对 Meteor 还很陌生。我正在开发一个简单的应用程序。 这是我遇到的问题:

Template.newFeedForm.events({
   'submit #new-feed-form'(event) {
       event.preventDefault();

       const target = event.target;
       const text = target.text;

       Meteor.call('feeds.insert', text);

       target.text.value = '';
   }
});

所以我有 newFeedForm 模板,在我的 feeds.js 中我有

Meteor.methods({
    'feeds.insert'(text){
        check(text, String);
        //check(hashtag, String);

        // Make sure the user is logged in before inserting a task
        if (! this.userId) {
            throw new Meteor.Error('not-authorized');
        }
        console.log(this.userId);

        // Feeds.insert({
        //     text: text,
        //     owner: this.userId,
        //     username: Meteor.users.findOne(this.userId).username,
        //     createdAt: new Date()
        // });
    }
});

我在这里注释掉了 Feeds.insert,认为它导致了问题。似乎有些不同。 每当执行 Meteor.call 时,我都会得到这个:

15536​​6114

不知道发生了什么。 这是我的 repo,它重现了此错误: https://github.com/yerassyl/nurate-meteor

2个回答

通常,当出现此类错误时(尤其是在处理 Meteor 方法时),这意味着您可能没有传递“正确”的数据(或您认为的数据)。

查看您的表单处理代码,我注意到您从未获取过 textarea 文本数据。

const text = target.text;

target.text 返回实际的 textarea DOM 对象,但您真正想要的是对象包含的值。以下代码将解决您的问题。

const text = target.text.value;
jordanwillis
2017-02-21

当您使用 db.find() 与 Meteor 协同工作时,它会给出错误 RangeError: Maximum call stack size reached ,因为它返回的是作为反应性数据源的游标。

使用此 db.find().fetch() 以数组形式获取数据。

db.find() -> It return cursor which is reactive data source

db.find().fetch() -> It return array from the cursor

shubham kapoor
2021-02-28