Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor客户端函数未向Accounts.createUser的服务器函数传递数据_Meteor - Fatal编程技术网

Meteor客户端函数未向Accounts.createUser的服务器函数传递数据

Meteor客户端函数未向Accounts.createUser的服务器函数传递数据,meteor,Meteor,我有一个客户端函数,用于注册一个用户,该用户将数据对象传递到服务器以创建用户。我完全可以在客户端看到数据对象,但是当服务器函数运行(registerNewUser)时,它会失败,并出现一个错误,表示数据未定义 在客户端上,register.js: if (Meteor.isClient){ Template.registrationStep2.events({ 'submit form': function(e, template) { e.p

我有一个客户端函数,用于注册一个用户,该用户将数据对象传递到服务器以创建用户。我完全可以在客户端看到数据对象,但是当服务器函数运行(
registerNewUser
)时,它会失败,并出现一个错误,表示数据未定义

在客户端上,register.js

if (Meteor.isClient){

    Template.registrationStep2.events({

        'submit form': function(e, template) {
            e.preventDefault();

            if (Session.get("registrationInstitutionID") && Session.get("registrationInstitutionRole")) {

                var data = [];

                var institutionID = template.find('#institutionID').value;
                var institutionRole = template.find('#institutionRole').value;
                var institutionName = template.find('#institutionName').value;

                data.login = template.find('#login').value;
                console.log("login: " + data.login);

                var firstName = template.find('#firstName').value;
                console.log("firstName: " + firstName);
                var lastName = template.find('#lastName').value;
                console.log("lastName: " + lastName);

                data.email = template.find('#email').value;
                console.log("email: " + data.email);
                data.password = template.find('#password').value;

                data.profile = {
                    firstName: firstName,
                    lastName: lastName,
                    role: institutionRole,
                    institutionID: institutionID
                }

                Meteor.call('registerNewUser', data, function(error, result){
                    Meteor.log.trace("User Data Object", data);
                    console.log(data);
                    if(error){
                        console.log("error", error);
                        Meteor.log.error("Error Creating User", error);
                    }
                    if(result){
                        console.log("SUCCESS adding user.");
                        Meteor.log.error("Success Result", result);

                        Session.set("flashType", "success");
                        Session.set("flashMessage", "Your account has been created.");

                        Router.go('registrationComplete');
                    }
                });

            } else {
                // alert("Need institution");
                $('#needInstitutionModal').modal('show');
            }
        }
    });
}
Meteor.methods({
    'registerNewUser': function(data) {
        Meteor.log.debug("User Data Object on Server", data);
        console.log(data);
        return Accounts.createUser({
            username: data.login,
            email: data.email,
            password: data.password,
            profile: data.profile
    }
});
以下是server.js

if (Meteor.isClient){

    Template.registrationStep2.events({

        'submit form': function(e, template) {
            e.preventDefault();

            if (Session.get("registrationInstitutionID") && Session.get("registrationInstitutionRole")) {

                var data = [];

                var institutionID = template.find('#institutionID').value;
                var institutionRole = template.find('#institutionRole').value;
                var institutionName = template.find('#institutionName').value;

                data.login = template.find('#login').value;
                console.log("login: " + data.login);

                var firstName = template.find('#firstName').value;
                console.log("firstName: " + firstName);
                var lastName = template.find('#lastName').value;
                console.log("lastName: " + lastName);

                data.email = template.find('#email').value;
                console.log("email: " + data.email);
                data.password = template.find('#password').value;

                data.profile = {
                    firstName: firstName,
                    lastName: lastName,
                    role: institutionRole,
                    institutionID: institutionID
                }

                Meteor.call('registerNewUser', data, function(error, result){
                    Meteor.log.trace("User Data Object", data);
                    console.log(data);
                    if(error){
                        console.log("error", error);
                        Meteor.log.error("Error Creating User", error);
                    }
                    if(result){
                        console.log("SUCCESS adding user.");
                        Meteor.log.error("Success Result", result);

                        Session.set("flashType", "success");
                        Session.set("flashMessage", "Your account has been created.");

                        Router.go('registrationComplete');
                    }
                });

            } else {
                // alert("Need institution");
                $('#needInstitutionModal').modal('show');
            }
        }
    });
}
Meteor.methods({
    'registerNewUser': function(data) {
        Meteor.log.debug("User Data Object on Server", data);
        console.log(data);
        return Accounts.createUser({
            username: data.login,
            email: data.email,
            password: data.password,
            profile: data.profile
    }
});
如果我对createUser函数的值进行硬编码,则所有值都可以正常工作。但是当我使用数据对象时,每个字段都会出现这样的错误。(我从控制台日志中知道,在调用服务器函数之前,客户机中存在数据对象)

下面是具体的错误行,以防下面很难看到:
调用方法“registerNewUser”时出现异常错误:匹配错误:预期字符串,在字段username中未定义

以下是日志的相关输出:

I20150710-07:56:51.072(-5)? (07:56:51) [DEBUG @ programs/server/packages/ostrio_loggerconsole.js:67] - Object: 
I20150710-07:56:51.072(-5)? {
I20150710-07:56:51.072(-5)?     "time": "2015-07-10T12:56:51.070Z",
I20150710-07:56:51.072(-5)?     "level": "DEBUG",
I20150710-07:56:51.072(-5)?     "message": "User Data Object on Server",
I20150710-07:56:51.072(-5)?     "additional": []
I20150710-07:56:51.072(-5)? }
I20150710-07:56:51.075(-5)? logging data object on server ================+
I20150710-07:56:51.075(-5)? []
I20150710-07:56:51.077(-5)? Exception while invoking method 'registerNewUser' Error: Match error: Expected string, got undefined in field username
I20150710-07:56:51.078(-5)?     at checkSubtree (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/check.js:177:13)
I20150710-07:56:51.078(-5)?     at /Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/check.js:314:9
I20150710-07:56:51.078(-5)?     at Function._.each._.forEach (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/underscore.js:147:22)
I20150710-07:56:51.078(-5)?     at checkSubtree (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/check.js:308:5)
I20150710-07:56:51.078(-5)?     at check (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/check.js:50:5)
I20150710-07:56:51.078(-5)?     at createUser (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/accounts-password.js:795:3)
I20150710-07:56:51.078(-5)?     at Object.Accounts.createUser (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/accounts-password.js:875:10)
I20150710-07:56:51.078(-5)?     at [object Object].Meteor.methods.registerNewUser (app/server/server.js:17:25)
I20150710-07:56:51.078(-5)?     at [object Object].methodMap.(anonymous function) (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/meteorhacks_kadira.js:2536:30)
I20150710-07:56:51.078(-5)?     at maybeAuditArgumentChecks (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/ddp.js:2445:12)
I20150710-07:56:51.078(-5)?     at /Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/ddp.js:1476:20
I20150710-07:56:51.078(-5)?     at [object Object]._.extend.withValue (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/meteor.js:989:17)
I20150710-07:56:51.079(-5)?     at /Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/ddp.js:1475:41
I20150710-07:56:51.079(-5)?     at [object Object]._.extend.withValue (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/meteor.js:989:17)
I20150710-07:56:51.079(-5)?     at [object Object]._.extend.protocol_handlers.method (/Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/ddp.js:1474:51)
I20150710-07:56:51.079(-5)?     at /Users/srichardson/AppDevNew/ve-client-new/.meteor/local/build/programs/server/packages/meteorhacks_kadira.js:2425:38
I20150710-07:56:51.079(-5)? Sanitized and reported to the client as: Match failed [400]

非常感谢您的帮助。

我不知道当您将数据用作对象时,为什么要将其声明为数组

试一试

相反

我只是尝试自己制作一个赤裸裸的版本,当我将它声明为一个数组时,我遇到了与您相同的问题,这很有趣


在客户端上,一切看起来都很正常(一旦开始使用密钥,数据就不再是数组),但在服务器上,数据是空数组。奇怪的结果,但将数据声明为对象修复了它。

Wow。就这样。不知道我在想什么,但我错过了。谢谢你指出这一点。真是个有趣的问题。