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

标签 javascript mongodb meteor

我是 Meteor 的新手,正在尝试弄清楚如何检查用户是否已存在于数据库中。用户名是通过表单提交的,我希望代码在继续下面的代码之前等待回复。

我以为我已经弄清楚了,但我收到了一个未定义的回复,即使我知道一个用户已经存在于数据库中。

这是我目前所拥有的:

在浏览器控制台中,这会成功执行。

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

在 Mongo 终端控制台中,这会成功执行。

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

示例.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.methods returns undefined

你需要做的是使用 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.
  }
});

关于javascript - 通过同步调用检查用户是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785700/

相关文章:

javascript - 在 Camunda 进程中,如何使用 JavaScript 和 Spin 从 JSON 中检索 bool 值?

javascript - 将mysql数据库中的值获取到wordpress中的javascript中

javascript - 如何使用状态插件管理选定的叶子

macos - 在 Mac 10.8 上从另一个本地设备访问 Meteor 本地 Web 服务器

javascript - 用户可以使用 javascript 或任何其他方式操作只读字段中的值吗?

javascript - 使用 MongoDB 的 Visual Studio Code 中的验证错误

java - 如何使用java代码根据building_Id和floor_Id从MongoDB获取数据?

node.js - Mongoose 没有重新创建索引集合被删除

javascript - 在 Meteor.JS 中创建第一个用户时创建第二个用户

node.js 与meteor.js 有什么区别?