Метеор 500 ошибка

Я работаю над приложением Meteor с React в качестве внешней библиотеки. В настоящее время я пытаюсь вставить данные в коллекцию Accounts, но получаю ошибку 500 в своем коде. К сожалению, консольная ошибка — это не то, что я могу напрямую использовать с моим опытом работы с Meteor.

Ошибка в консоли:

I20180815-21:04:45.128(2)? Exception while invoking
method'customers.insert' ReferenceError: document is not defined
I20180815-21:04:45.129(2)?     at MethodInvocation.customers.insert
(imports/collections/customers.js:13:27)
I20180815-21:04:45.129(2)?     at maybeAuditArgumentChecks 
(packages/ddp-server/livedata_server.js:1767:12)
I20180815-21:04:45.129(2)?     at DDP._CurrentMethodInvocation.withValue 
(packages/ddp-server/livedata_server.js:719:19)
I20180815-21:04:45.129(2)?     at 
Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1304:12)
I20180815-21:04:45.129(2)?     at DDPServer._CurrentWriteFence.withValue 
(packages/ddp-server/livedata_server.js:717:46)
I20180815-21:04:45.130(2)?     at 
Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1304:12)
I20180815-21:04:45.130(2)?     at Promise (packages/ddp-server
/livedata_server.js:715:46)
I20180815-21:04:45.130(2)?     at new Promise (<anonymous>)
I20180815-21:04:45.130(2)?     at Session.method (packages/ddp-server.  
/livedata_server.js:689:23)
I20180815-21:04:45.130(2)?     at packages/ddp-server 
/livedata_server.js:559:43

Я думаю, что это может быть как-то связано с импортом, но я не могу понять этого.

Остальная часть моего кода:

клиент.js

import { Mongo } from 'meteor/mongo';

Meteor.methods({
  'customers.insert': function() {
    console.log('test');
  },
  'customers.remove': function(customer) {
    return Customers.remove(customer);
  }
});

export const Customers = new Mongo.Collection('customers');

customer_create.js

import React, { Component } from 'react';

class CustomersCreate extends Component {
onFormSubmit(event) {
    event.preventDefault();

    Meteor.call('customers.insert');
}
render() {
    return (
        <div>
            <form onSubmit={this.onFormSubmit.bind(this)}>

                <fieldset>
                    <label htmlFor="contactemail">E-mailadres contactpersoon</label>
                    <input id="contactemail" name="contactemail" type="text" />
                </fieldset>

                <fieldset>
                    <label htmlFor="password">Wachtwoord</label>
                    <input id="password" name="password" type="text" />
                </fieldset>
                <fieldset>
                    <label htmlFor="password">Wachtwoord bevestigen</label>
                    <input id="confirmpassword" name="confirmpassword" type="text" />
                </fieldset>

                <fieldset>
                    <button className="submit-button">Toevoegen</button>
                </fieldset>
            </form>
        </div>
      );
   }
}
export default CustomersCreate;

И, наконец, моя подписка:

import { Meteor } from 'meteor/meteor';
import { RegistrationCards } from '../imports/collections/registrationcards';
import { Customers } from '../imports/collections/customers';


Meteor.startup(() => {
  Meteor.publish('registrationcards', function() {
    return RegistrationCards.find({});
  });
  Meteor.publish('customers', function() {
    return Customers.find({});
  });
});

дополнение: когда я пытался решить эту проблему, я также заметил, что получаю следующее исключение:

Exception while simulating the effect of invoking 'customers.insert' TypeError: "event is undefined"

@edit: Исправлены последние проблемы. Сделал небольшую опечатку


person TheAmplifier    schedule 15.08.2018    source источник


Ответы (1)


Ошибка в консоли является справочной ошибкой, в которой говорится, что документ не определен. Как вы вставляете нового клиента? Вы не указали это в своем коде. Идеальный способ — создать объект клиента, используя значения из полей формы, и когда вы вызываете метод «customer.insert», вы передаете ему объект клиента. const customer = { name: } // вызов метода, передаваемого в объекте Meteor.call('customer.insert', customer) В методе 'customer.insert' на стороне сервера вы делаете вставку в документ клиента. Customer.insert(клиент)

person James Oshomah    schedule 15.08.2018
comment
Привет, спасибо, что подняли этот вопрос. Я заметил, что я не правильно указал это. Я добавил объект с данными клиента и получил их на сервере. теперь все работает! большое спасибо. - person TheAmplifier; 15.08.2018