如何查询特定路线的好友帖子 API
How to Query Friends Posts In Rest API for a specific Route
我在 SailsJS 中工作,我正在尝试为我的移动应用程序构建一个 REST API 后端,它允许新闻源路径,这样如果我在前端查询 JSON end 我可以从 www.website.com/user/id/Newsfeed 得到它。 Controller 获取每个用户的朋友和他们的帖子,并在该路线上按时间顺序显示在 JSON 中。我来自 objective-C 背景,所以请忍受我的新手。
config/routes.js
module.exports.routes = {
'/': {
view: 'homepage'
},
'get /user/:id/newsfeed': {
controller: 'UserController',
action: 'newsfeed'
}
};
Model/User.js
var User = module.exports = {
//User attributes
attributes: {
facebookId: 'string',
accessToken: 'string',
location: 'string',
email: 'string',
first_name: 'string',
last_name: 'string',
about: {
interests: 'string',
goals: 'strings',
headline: 'string',
birthday: 'date'
},
friends : {
type: 'json'
},
posts: {
collection: 'posts',
via: 'user'
},
picture: 'string'
}
};
controllers/UserControllers.js
module.exports = {
newsfeed: function(req, res) {
var userId = req.session.id.friends;
sails.log("Searching for user's friends: "+ userId);
User.find({ where: { userId: { equals: userId}}}).exec(function(err, records) {
if(records && records.length == 0) {
sails.log("No friends found for user:" + userId);
sails.log(err);
return res.json(404, "No Friends Found :'(, you'll have alot soon! You're too cool not to.");
} else {
var friendsPostsArray = [];
for (i = 0; i < records.length; i++) {
var friendsPosts =records[i].posts;
friendsPostsArray.push(friendsPosts);
}
var uniquePosts = friendsPostsArray.filter(function (item, i , ar) {
return ar.indexOf(item) === i;
});
uniquePosts.sort();
sails.log(uniquePosts);
sails.log("Returning" + records.length + "friends found for user:" + userId);
return res.json(200, {friends: records, posts: uniquePosts});
}
});
}
};
似乎您应该将朋友存储为模型中的用户集合:
friends: {
collection: 'user',
via: 'id'
}
然后在您的控制器中,使用他们的朋友和帖子填充您的查询,如下所示:
newsfeed: function (req, res) {
var userId = req.param('id');
sails.log("Searching for user's friends: " + userId);
User.find({ userId: userId })
.populate('friends')
.populate('posts')
.exec(function (err, found) {
/* Now we have a list of friends, we can find their posts */
User.find({ userId: found.friends })
.populate('posts')
.exec(function (err, found) {
/* Process friends posts here */
});
});
}
编辑:添加了填充好友帖子所需的代码。
答案原来是 Frederick 的答案和另一个朋友的一些 tweeking 的结合。
newsfeed: function (req, res) {
var userId = (req.param('id'));
sails.log("Searching for user's friends: " + userId);
User.find({ id: userId })
.populate('friends')
.populate('posts')
.exec(function (err, found) {
if (err) return res.status(err).json(400);
res.json(200, {found});
});
}
但这还没有完全完成,因为这只是 returns 一个好友列表和 :id 用户的帖子。我使用 param
而不是 session
并更改了 find()
部分,所以我不知道我是否可以给 Frederick 绿色的荣耀检查,但肯定有我的赞成票。希望这对任何低级编码员有帮助!
我在 SailsJS 中工作,我正在尝试为我的移动应用程序构建一个 REST API 后端,它允许新闻源路径,这样如果我在前端查询 JSON end 我可以从 www.website.com/user/id/Newsfeed 得到它。 Controller 获取每个用户的朋友和他们的帖子,并在该路线上按时间顺序显示在 JSON 中。我来自 objective-C 背景,所以请忍受我的新手。
config/routes.js
module.exports.routes = {
'/': {
view: 'homepage'
},
'get /user/:id/newsfeed': {
controller: 'UserController',
action: 'newsfeed'
}
};
Model/User.js
var User = module.exports = {
//User attributes
attributes: {
facebookId: 'string',
accessToken: 'string',
location: 'string',
email: 'string',
first_name: 'string',
last_name: 'string',
about: {
interests: 'string',
goals: 'strings',
headline: 'string',
birthday: 'date'
},
friends : {
type: 'json'
},
posts: {
collection: 'posts',
via: 'user'
},
picture: 'string'
}
};
controllers/UserControllers.js
module.exports = {
newsfeed: function(req, res) {
var userId = req.session.id.friends;
sails.log("Searching for user's friends: "+ userId);
User.find({ where: { userId: { equals: userId}}}).exec(function(err, records) {
if(records && records.length == 0) {
sails.log("No friends found for user:" + userId);
sails.log(err);
return res.json(404, "No Friends Found :'(, you'll have alot soon! You're too cool not to.");
} else {
var friendsPostsArray = [];
for (i = 0; i < records.length; i++) {
var friendsPosts =records[i].posts;
friendsPostsArray.push(friendsPosts);
}
var uniquePosts = friendsPostsArray.filter(function (item, i , ar) {
return ar.indexOf(item) === i;
});
uniquePosts.sort();
sails.log(uniquePosts);
sails.log("Returning" + records.length + "friends found for user:" + userId);
return res.json(200, {friends: records, posts: uniquePosts});
}
});
}
};
似乎您应该将朋友存储为模型中的用户集合:
friends: {
collection: 'user',
via: 'id'
}
然后在您的控制器中,使用他们的朋友和帖子填充您的查询,如下所示:
newsfeed: function (req, res) {
var userId = req.param('id');
sails.log("Searching for user's friends: " + userId);
User.find({ userId: userId })
.populate('friends')
.populate('posts')
.exec(function (err, found) {
/* Now we have a list of friends, we can find their posts */
User.find({ userId: found.friends })
.populate('posts')
.exec(function (err, found) {
/* Process friends posts here */
});
});
}
编辑:添加了填充好友帖子所需的代码。
答案原来是 Frederick 的答案和另一个朋友的一些 tweeking 的结合。
newsfeed: function (req, res) {
var userId = (req.param('id'));
sails.log("Searching for user's friends: " + userId);
User.find({ id: userId })
.populate('friends')
.populate('posts')
.exec(function (err, found) {
if (err) return res.status(err).json(400);
res.json(200, {found});
});
}
但这还没有完全完成,因为这只是 returns 一个好友列表和 :id 用户的帖子。我使用 param
而不是 session
并更改了 find()
部分,所以我不知道我是否可以给 Frederick 绿色的荣耀检查,但肯定有我的赞成票。希望这对任何低级编码员有帮助!