2017-02-09 134 views
2

我試圖創建一個新的集合'配置文件'時運行Accounts.onCreateUser但是我得到一個ReferenceError:配置文件未定義。我認爲這是一個加載順序問題。如果我將模式文件移動到一個lib文件夾中,它可以工作,但我試圖使用Meteor網站上現在推薦的文件結構。ReferenceError:沒有定義

有些請讓我知道我失蹤。我是新進口和出口,所以它可能與此有關。

路徑: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; 
    }); 
}); 

回答

3

在你的createUser文件,你需要導入配置文件集合。 Imports目錄中的任何文件都不會由Meteor自動加載,所以您需要在使用它們時隨時導入它們。這就是當文件位於/lib目錄但不在/imports目錄中時它正在工作的原因。

可以導入的收集和固定用下面的代碼的問題,您createUser.js文件:

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

編輯

我沒發現,你是不是導出集合定義。您需要導出集合定義,以便可以將其導入其他位置。感謝米歇爾弗洛伊德指出這一點。你這樣做,通過修改代碼如下:

export const Profile = new Mongo.Collection('profile'); 
+0

我現在越來越'異常而調用方法「ATCreateUserServer」類型錯誤:無法讀取的undefined' – bp123

+1

財產「插入」不,他需要導出配置文件從'profile.js'以及? –

+0

@MichelFloyd你是完全正確的,我沒有發現他沒有出口它。將更新。謝謝 – Sean