Я только что закончил с черновиком моего приложения и подумал, что пришло время удалить автоматический и небезопасный режим. Я начал передавать все измененные методы обновления и вставки, которые я вызывал на клиенте для методов. Но теперь у меня возникли проблемы , возвращая имя пользователя из ID.Получение имени пользователя из ID без автообновления
Моя функция перед: (который работал, пока не удалены autopublish)
challenger: function() {
var postId = Session.get('activePost');
var post = Posts.findOne(postId);
if (post.challenger !== null) {
var challenger = Meteor.users.findOne(post.challenger);
return challenger.username;
}
return false;
}
Теперь я пытаюсь:
Template.lobby.helpers({
challenger: function() {
var postId = Session.get('activePost');
var post = Posts.findOne(postId);
if (post.challenger !== null) {
var userId = post.challenger;
Meteor.call('getUsername', userId, function (err, result) {
if (err) {
console.log(err);
}
return result;
});
}
return false;
},
Использование:
Meteor.methods({
getUsername: function(userId) {
var user = Meteor.users.findOne({_id: userId});
var username = user.username;
return username;
},
...
})
I попытались заблокировать код, возвращая значения только после их определения, а console.loggi ng в call-callback (который вернул правильное имя пользователя для консоли, но вид не изменился)
Надеясь, что кто-то найдет явную ошибку, которую я делаю, потому что я пробовал уже 3 часа, t выяснить, почему значение будет возвращено в консоли, но не будет возвращено в шаблон.
Спасибо, это сработало. Я подписался в какой-то момент, но забыл опубликовать. Итак, теперь у меня есть: Meteor.publish ('users', function() { return Meteor.users.find(); }); –
Публикация всех пользователей, вероятно, непрактична для достаточно большого приложения. И даже для небольшого приложения вы хотите, чтобы в белый список полей было что-то вроде '{fields: {username: 1, profile: 1}}', чтобы вы не публиковали конфиденциальные данные, такие как хэши паролей и токены резюме. – user3374348