我正在尝试创建一个Meteor方法,以便从autoform创建的表单中保存用户配置文件。我收到一条错误消息,指出未定义userSchema。它在我的助手中定义,它在Meteor.isClient条件下,这可能是问题。我尝试将它提供给客户端和服务器,但是没有用。
我尝试实现的只是获取表单值并将其插入到Meteor.users.profile中。
看起来服务器没有看到客户端上可见的userSchema。
我收到此错误:
I20140816-14:14:28.170(-7)?调用方法' saveProfile' ReferenceError:未定义userSchema I20140816-14:14:28.173(-7)?在Meteor.methods.saveProfile(app / server / server.js:6:16) I20140816-14:14:28.173(-7)?在maybeAuditArgumentChecks(packages / livedata / livedata_server.js:1487) I20140816-14:14:28.173(-7)?在packages / livedata / livedata_server.js:643 I20140816-14:14:28.173(-7)? at _.extend.withValue(packages / meteor / dynamics_nodejs.js:56) I20140816-14:14:28.174(-7)?在packages / livedata / livedata_server.js:642 I20140816-14:14:28.174(-7)? at _.extend.withValue(packages / meteor / dynamics_nodejs.js:56) I20140816-14:14:28.176(-7)?在_.extend.protocol_handlers.method(packages / livedata / livedata_server.js:641) I20140816-14:14:28.176(-7)? at packages / livedata / livedata_server.js:541
我的架构:
if (Meteor.isClient) {
Schema = {};
Schema.UserProfile = new SimpleSchema({
firstName: {
type: String,
regEx: /^[a-zA-Z-]{2,25}$/
},
lastName: {
type: String,
regEx: /^[a-zA-Z]{2,25}$/
},
gender: {
type: String,
allowedValues: ['Male', 'Female']
},
bio: {
type: String,
},
avatar: {
type: String,
},
pinCode: {
type: Number,
min: 7,
max: 7
},
phoneNumber: {
type: Number,
min: 9,
max: 10
}
});
Schema.User = new SimpleSchema({
_id: {
type: String,
regEx: SimpleSchema.RegEx.Id,
optional: true,
},
email: {
type: String,
regEx: SimpleSchema.RegEx.Email,
optional: true,
},
createdAt: {
type: Date,
optional: true
},
profile: {
type: Schema.UserProfile,
},
services: {
type: Object,
optional: true,
blackbox: false
}
});
SimpleSchema.debug = true;
Meteor.users.attachSchema(Schema.User);
}
这是我的帮手:
Template.signupForm.helpers({
users: function () {
return Meteor.users;
},
userSchema: function () {
console.log('returning user schema')
console.log(Schema.User)
return Schema.User;
}
});
My Meteor方法(server.js):
Meteor.methods({
saveProfile: function(doc) {
console.log('Meteor method 1')
// Important server-side check for security and data integrity
check(doc, userSchema);
console.log('Meteor method')
console.log(doc.firstName)
}
});
我的模板
<template name="signupForm">
<div class="panel-body">
{{#autoForm schema=userSchema id="signupForm" type="method" meteormethod="saveProfile"}}
<fieldset>
{{> afObjectField name='profile'}}
</fieldset>
<button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}
</div>
</template>
答案 0 :(得分:1)
请申请2个步骤:
1:
将Schema
对象(包括所有后代)添加到dir(如同文件夹),以便客户端和服务器可以看到它。
2:
在服务器端,使用 Schema.User 而不是 userSchema 。
请注意, userSchema 是在Template.signupForm.helpers
的客户端定义的,因此Meteor.methods.saveProfile
无法找到它。