Я создаю успокоительный API, используя экспресс, мангуст и монгодб. Он работает отлично, но у меня есть вопрос о том, как обращаться с запросами, которые содержат больше функциональных возможностей, чем просто найти, удалить или обновить в базе данных. Моя модель пользователя выглядит следующим образом:Expressjs rest api, как бороться с функциональностью цепочки
var UserSchema = new Schema({
emailaddress: {type: String, unique: true},
firstname: String,
lastname: String,
password: String,
friends: [{type: Schema.Types.ObjectId, unique: true}]
});
Как вы можете видеть, массив друзей представляет собой массив объектов ObjectIds. Эти ObjectIds относятся к конкретным пользователям в базе данных. Если я хочу получить массив друзей пользователя, теперь я должен искать пользователя, который делает запрос, а затем найти всех пользователей, имеющих тот же идентификатор, что и в массиве друзей.
Теперь это выглядит следующим образом:
methods.get_friends = function(req, res) {
//find user.
User.findOne({_id: req.params.id}, function(err, user, next) {
if(err) next(err);
if(user) {
console.log(user);
//find friends
User.find({_id: {$in: user.friends}}, {password: 0}).exec(function (err,
friends, next) {
if(err) next(err);
if(friends) {
res.send(friends);
};
});
}
Будет ли возможно отделить поиск пользователя в определенном способе и цепочки методов? Я видел что-то о цепочке связующего ПО, то есть app.get('/friends', getUser, getFriend)
, но это означает, что мне нужно изменить объект req в моем методе промежуточного программного обеспечения (getUser), а затем передать его? Как бы вы решили эту проблему? Возможно, вы измените модель мангуста и сохраните все данные друзей (это значит, что это может устареть) или вы создадите метод getUser, который вернет обещание, по которому вы будете собирать данные друга?
Буду благодарен за всю помощь, которую я могу получить!
Заранее спасибо.
Я бы, вероятно, использовал способность Mongoose [population] (http://mongoosejs.com/docs/populate.html), которая уже довольно похожа на вашу текущую схему. Средство промежуточного уровня (по крайней мере, так, как вы описываете) представляет собой конструкцию Express, которая не имеет непосредственного смысла применять поверх Mongoose IMO. – robertklep
Спасибо, Роберт, я использовал способность заполнить. Не могли бы вы создать ответ с информацией о своем комментарии, тогда я могу принять его как правильный ответ. – Bram