Meteor.users 仅订阅 return 当前用户
Meteor.users subscribe only return current user
我试图通过用户名获取用户,当我使用 Meteor.users.findOne
时,它总是 return 当前用户。如果我使用 Meteor.users.find
,它 return 是所有当前用户文档,以及正确匹配的用户名的 profile.firstName
和 profile.lastName
。
Meteor.publish('userByUsername', function(username) {
return Meteor.users.findOne({
username: username
}, {
fields: {
'profile.firstName': 1,
'profile.lastName': 1,
}
});
});
如何只获取与用户名匹配的用户?
我想你想要的不是发布,而是一种访问特定用户名的方法。 Publish/Subscribe 非常适合经常变化的数据集 - 比如 Whosebug 上的帖子、facebook 提要、新闻文章等。
您正在寻找 first/last 特定用户的名称,这并没有真正改变。所以你真正想要的是创建一个服务器方法,该方法 returns 用户的 first/last 名称。您可以从客户端调用此方法来访问此数据。
if (Meteor.isClient) {
//get username var
Meteor.call('findUser', username, function(err, res) {
console.log(res.profile.firstName + " " + res.profile.lastName);
});
}
if (Meteor.isServer) {
Meteor.methods({
findUser: function(username) {
return Meteor.users.findOne({
username: username
}, {
fields: {
'profile.firstName': 1,
'profile.lastName': 1
}
});
}
});
}
注意客户端Meteor.call有一个回调方法。 Meteor 服务器上的数据库查询是异步和非阻塞的,因此您需要通过 javascript 回调函数访问结果。
findOne 找到并 returns 第一个与选择器匹配的文档。发布方法需要return一个游标,需要使用find,而不是findOne:
Meteor.publish('userByUsername', function(username) {
return Meteor.users.find({
username: username
}, {
fields: {
'profile.firstName': 1,
'profile.lastName': 1,
}
});
});
然后就可以在客户端调用subscribe了:
Meteor.subscribe('userByUsername', 'bob');
然后在你的助手中调用 Meteor.users.findOne({ username: 'bob' });
。
我试图通过用户名获取用户,当我使用 Meteor.users.findOne
时,它总是 return 当前用户。如果我使用 Meteor.users.find
,它 return 是所有当前用户文档,以及正确匹配的用户名的 profile.firstName
和 profile.lastName
。
Meteor.publish('userByUsername', function(username) {
return Meteor.users.findOne({
username: username
}, {
fields: {
'profile.firstName': 1,
'profile.lastName': 1,
}
});
});
如何只获取与用户名匹配的用户?
我想你想要的不是发布,而是一种访问特定用户名的方法。 Publish/Subscribe 非常适合经常变化的数据集 - 比如 Whosebug 上的帖子、facebook 提要、新闻文章等。
您正在寻找 first/last 特定用户的名称,这并没有真正改变。所以你真正想要的是创建一个服务器方法,该方法 returns 用户的 first/last 名称。您可以从客户端调用此方法来访问此数据。
if (Meteor.isClient) {
//get username var
Meteor.call('findUser', username, function(err, res) {
console.log(res.profile.firstName + " " + res.profile.lastName);
});
}
if (Meteor.isServer) {
Meteor.methods({
findUser: function(username) {
return Meteor.users.findOne({
username: username
}, {
fields: {
'profile.firstName': 1,
'profile.lastName': 1
}
});
}
});
}
注意客户端Meteor.call有一个回调方法。 Meteor 服务器上的数据库查询是异步和非阻塞的,因此您需要通过 javascript 回调函数访问结果。
findOne 找到并 returns 第一个与选择器匹配的文档。发布方法需要return一个游标,需要使用find,而不是findOne:
Meteor.publish('userByUsername', function(username) {
return Meteor.users.find({
username: username
}, {
fields: {
'profile.firstName': 1,
'profile.lastName': 1,
}
});
});
然后就可以在客户端调用subscribe了:
Meteor.subscribe('userByUsername', 'bob');
然后在你的助手中调用 Meteor.users.findOne({ username: 'bob' });
。