Я пытаюсь создать маршрут для пользователей, чтобы иметь возможность проверять профили других пользователей. Тем не менее, я хочу, чтобы эти профили принимались через 2 разных URL /profile/nickname
и /profile/id
, чтобы профиль можно было использовать, используя псевдоним пользователя или идентификатор пользователя. Я попробовал следующий код:
app.get("/profile/:id", function(req, res) {
User.findOne( { $or : [{ "nickname": req.params.id },{ "_id": req.params.id }] }, function(err, user) {
if(user)
{
res.render('users/profile.jade', {
locals: {
currentUser: user,
title: user.nickname +"'s Profile",
jsf:[],
}
});
}
else
{
res.render('404.jade', {
status: 404,
title: 'Page Not Found',
jsf: []
});
}
});
});
Проблема в том, что, похоже, он работает только с идентификатором, а не с псевдонимом, что означает, что если я получаю доступ к /profile/4f4ae474546708b219000005
, все работает, но если я получаю доступ к /profile/mmellad
, который является данным псевдонимом для этого пользователя, Я получаю страницу 404.
Есть еще одна вещь, которую я понял, которая отлично работает для псевдонимов, которая меняет запрос с
User.findOne( { $or : [{ "nickname": req.params.id },{ "_id": req.params.id }] }
до
User.findOne( { "nickname": req.params.id } }
в этом случае /profile/mmellado
работает нормально, но использование идентификатора пользователя, очевидно, не работает.
Что было бы правильным способом сделать это? Я думаю, что могу использовать неправильный подход.
Еще одна вещь, которую стоит упомянуть: если я попробую следующий код в консоли mongo, он также будет работать нормально:
x = db.users.findOne({ $or: [ {nickname:"mmellado"}, {_id:ObjectId("4f4ae474546708b219000005")} ]})
Я протестировал этот код, вставив правильный псевдоним и неправильный _id, а затем протестировал с неправильным псевдонимом и правильным _id. В обоих случаях x в итоге содержал объект для нужной мне записи.
Я думаю, что смогу исправить это с помощью дополнительного маршрута, но я новичок в Node.js и Express вместе, так что я не уверен, каким будет подход с проппером.
Спасибо!