【发布时间】:2015-03-01 03:28:45
【问题描述】:
我是 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'}]});
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();
});
}
【问题讨论】:
-
我喜欢这种模式:discovermeteor.com/patterns/5828399 我现在将它用于所有需要向客户端返回结果或错误的 Meteor 方法。
标签: javascript mongodb meteor