У меня есть метеорный проект, где все мои пользователи имеют свои собственные настройки страницы профиля таким образом, используя маршруты:Добавление элементов коллекции в качестве маршрутов в Метеоре
Маршруты Код:
Router.route('/@:username', {
name: 'profile',
controller: 'ProfileController'
});
ProfileController = RouteController.extend({
template: 'profile',
waitOn: function() {
return Meteor.subscribe('userProfile', this.params.username);
},
data: function() {
var username = Router.current().params.username;
return Meteor.users.findOne({
username: username
});
}
});
Серверный код:
Meteor.publish('users', function() {
return Meteor.users.find({}, {fields: {username: 1, emails: 1, profile: 1, roles: 1}});
});
Meteor.publish('userProfile', function(username) {
// Try to find the user by username
var user = Meteor.users.findOne({
username: username
});
// If we can't find it, mark the subscription as ready and quit
if (!user) {
this.ready();
return;
}
// If the user we want to display the profile is the currently logged in user
if(this.userId === user._id) {
// Then we return the curresonding full document via a cursor
return Meteor.users.find(this.userId);
} else {
return Meteor.users.find(user._id, {
fields: {
profile: 0
}
});
}
});
Я хочу сделать что-то подобное со страницей, которую я создал. При создании коллекционных работ и на странице сбора есть поле _id
, созданное при создании.
Прямо сейчас программа отлично работает для пользователей, где работает mysite.com/@. Теперь я хочу, чтобы то же самое было для mysite.com/ &
В основном я пытался сделать то же самое, что и в приведенном выше коде, с именем пользователя, но он не работал. Я проверил, чтобы убедиться, что мое создание элементов коллекции работает, и они есть. Но почему-то я не могу понять, как сделать то же самое с коллекциями, поскольку я относительно новичок в использовании маршрутов.
Это то, что я пытался:
Вот мои маршруты: Код
var pageRoute = '/&:_id';
Router.route(pageRoute, {
name: 'page',
controller: 'PageController'
});
PageController = RouteController.extend({
template: 'page',
waitOn: function() {
return Meteor.subscribe('Page', this.params._id);
},
data: function() {
var _id = Router.current().params._id;
return Meteor.pages.findOne({
_id: _id
});
}
});
Сервера:
Meteor.publish('pages', function() {
return Pages.find({});
});
Meteor.publish('Page', function(_id) {
// Try find the page by _id
var page = Meteor.pages.findOne({
_id: _id
});
// If we can't find it, mark the subscription as ready and quit
if (!page) {
this.ready();
return;
}
// If the page we want to display is not claimed, display it
if(true) {
return Meteor.pages.find(this._id);
} else {
// Redirect to the page
}
});
Схема коллекция Страницы:
_id: , createdAt:, CreatedBy:, claimedAt:, claimedBy:,
Update:
Я его область видимости вниз к этой проблеме, я получаю следующее сообщение об ошибке в консоли на стороне сервера:
I20160202-11:16:24.644(2)? Exception from sub qrPage id 2kY6RKCTuCpBDbuzm TypeError: Cannot call method 'findOne' of undefined
I20160202-11:16:24.645(2)? at [object Object].process.env.MAIL_URL [as _handler] (server/ecclesia.life_server.js:40:33)
I20160202-11:16:24.645(2)? at maybeAuditArgumentChecks (livedata_server.js:1698:12)
I20160202-11:16:24.645(2)? at [object Object]._.extend._runHandler (livedata_server.js:1023:17)
I20160202-11:16:24.645(2)? at [object Object]._.extend._startSubscription (livedata_server.js:842:9)
I20160202-11:16:24.646(2)? at [object Object]._.extend.protocol_handlers.sub (livedata_server.js:614:12)
I20160202-11:16:24.646(2)? at livedata_server.js:548:43
Этот ошибка возникает всякий раз, когда я пытаюсь направить на mysite.com/ & < _id>
Я должен упомянуть, что имя пользователя материал отлично работает, я стараюсь, чтобы получить коллекцию страниц, созданных пользователями для работы. –
# обозначает внутренний привязку страницы. –
Думая об этом дальше - по умолчанию путь подтверждения электронной почты для учетных записей Meteor начинается с #. Сам Хатум написал об этом в своем ответе на [этот вопрос в железе-маршрутизаторе] (https://github.com/iron-meteor/iron-router/issues/3) –