ReferenceError: не определено

Я пытаюсь создать новый «профиль» коллекции при запуске Accounts.onCreateUser, однако получаю сообщение об ошибке ReferenceError: Profile не определен. Я предполагаю, что это проблема порядка загрузки. Если я перемещаю файл схемы в папку lib, он работает, однако я пытаюсь использовать файловую структуру, которая теперь рекомендуется на сайте Meteor.

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

Путь: imports/profile/profile.js

import { Mongo } from 'meteor/mongo';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';


SimpleSchema.debug = true;


Profile = new Mongo.Collection("profile");

Profile.allow({
    insert: function(userId, doc) {
        return !!userId;
    },
    update: function(userId, doc) {
        return !!userId;
    },
    remove: function(userId, doc) {
        return !!userId;
    }
});


var Schemas = {};

Schemas.Profile = new SimpleSchema({
    userId: {
      type: String,
      optional: true
    },
    firstName: {
        type: String,
        optional: false,
    },
    familyName: {
        type: String,
        optional: false
    },
});

Profile.attachSchema(Schemas.Profile);

Путь: server/userRegistration/createUser.js

Meteor.startup(function () {

  console.log('Running server startup code...');

  Accounts.onCreateUser(function (options, user) {

    if (options.profile && options.profile.roles) {
      Roles.setRolesOnUserObj(user, options.profile.roles);

      Profile.insert({
        userId: user._id,
        firstName: options.profile.firstName,
        familyName: options.profile.familyName,
      });
    }

    if (options.profile) {
      // include the user profile
      user.profile = options.profile;
    }

    return user;
  });
});

person bp123    schedule 09.02.2017    source источник


Ответы (1)


В вашем файле createUser вам нужно импортировать коллекцию профилей. Любые файлы в каталоге импорта не загружаются Meteor автоматически, поэтому вам необходимо импортировать их каждый раз, когда вы их используете. Вот почему он работает, когда файл находится в каталоге /lib, но не в каталоге /imports.

Вы можете импортировать коллекцию и устранить проблему с помощью следующего кода в файле createUser.js:

import { Profile } from '/imports/profile/profile';

ИЗМЕНИТЬ

Я не заметил, что вы не экспортировали определение коллекции. Вам необходимо экспортировать определение коллекции, чтобы его можно было импортировать в другое место. Спасибо Мишелю Флойду за указание на это. Вы делаете это, изменяя свой код следующим образом:

export const Profile = new Mongo.Collection( 'profile' );
person Sean    schedule 09.02.2017
comment
Я сейчас получаю Exception while invoking method 'ATCreateUserServer' TypeError: Cannot read property 'insert' of undefined - person bp123; 10.02.2017
comment
Разве ему не нужно также экспортировать профиль из profile.js? - person Michel Floyd; 10.02.2017
comment
@MichelFloyd, вы совершенно правы, я не заметил, что он не экспортировал его. Будет обновляться. Спасибо - person Sean; 10.02.2017