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