Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Javascript 通过同步调用检查用户是否存在_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 通过同步调用检查用户是否存在

Javascript 通过同步调用检查用户是否存在,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我对Meteor非常陌生,我正在尝试找出如何检查数据库中是否已经存在用户。用户名正在通过表单提交,我希望代码在继续使用下面的代码之前等待答复 我想我已经弄明白了,但是我收到了一个未定义的回复,即使我知道数据库中已经存在一个用户 以下是我目前掌握的情况: 在浏览器控制台中,此操作将成功执行 Meteor.users.findOne({'$or': [{'username': 'me@example.com'},{'emails.address': 'me@example.com'}]}); db

我对Meteor非常陌生,我正在尝试找出如何检查数据库中是否已经存在用户。用户名正在通过表单提交,我希望代码在继续使用下面的代码之前等待答复

我想我已经弄明白了,但是我收到了一个未定义的回复,即使我知道数据库中已经存在一个用户

以下是我目前掌握的情况:

在浏览器控制台中,此操作将成功执行

Meteor.users.findOne({'$or': [{'username': 'me@example.com'},{'emails.address': 'me@example.com'}]});
db.users.findOne({'$or': [{'username': 'me@example.com'},{'emails.address': 'me@example.com'}]});
在Mongo终端控制台中,这将成功执行

Meteor.users.findOne({'$or': [{'username': 'me@example.com'},{'emails.address': 'me@example.com'}]});
db.users.findOne({'$or': [{'username': 'me@example.com'},{'emails.address': 'me@example.com'}]});
example.js:

if (Meteor.isClient) {
    // This code only runs on the client

    Meteor.subscribe("users");

    Template.registration.events({
        "submit #register_form": function (event) {
            // This function is called when the registration form is submitted.

            var form_data = {
                username: event.target.username.value,
                email: event.target.email.value,
                password: event.target.password.value,
                first_name: event.target.first_name.value,
                last_name: event.target.last_name.value,
                website: event.target.website.value
            };

            // Sync call. Wait for reply before executing remaining code below.
            var result = Meteor.call("check_username", form_data.username);

            alert("result = " + result);  // Returns undefined.

            // Execute remaining code if user does not exist.
        }
    });
}


Meteor.methods({
    check_username: function (username) {
        // Check if user exists.

        var user = Meteor.users.findOne({
            '$or': [
                {'username': username},
                {'emails.address': username}
            ]
        });

        return user;

        // Should I do this instead?
        //if (!user) {
        //  throw new Meteor.Error("user exists", "That user already exists.");
        //}
    }
});


if (Meteor.isServer) {
    Meteor.publish("users", function () {
        return Meteor.users.find();
    });
}

这是预期的行为,看看我在这里的详细回答:

您需要做的是使用Meteor.call的异步语法,在服务器实际返回结果时执行任意代码

Meteor.call("check_username", form_data.username,function(error, result){
  if(error){
    console.log(error.reason);
    return;
  }
  alert("result = " + result);  // Returns the result computed on the server
  if(!result){
    // Execute remaining code if user does not exist.
  }
});
我喜欢这种模式:我现在将它用于所有需要向客户机返回结果或错误的Meteor方法。