向meteor方法提交表单值但得到错误userSchema未定义

时间:2014-08-16 21:35:45

标签: javascript meteor

我正在尝试创建一个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>

1 个答案:

答案 0 :(得分:1)

请申请2个步骤:

1: 将Schema对象(包括所有后代)添加到dir(如同文件夹),以便客户端和服务器可以看到它。

2: 在服务器端,使用 Schema.User 而不是 userSchema 。 请注意, userSchema 是在Template.signupForm.helpers的客户端定义的,因此Meteor.methods.saveProfile无法找到它。