2015-11-13 33 views
2

我正在SailsJS中工作,我試圖爲我的移動應用程序構建一個REST API後端,以允許Newsfeed路徑,這樣如果我查詢JSON前端我可以從www.website.com/user/id/Newsfeed獲得。控制器獲取每個用戶的朋友和他們的帖子,並按照時間順序在該路線上以JSON顯示它。我來自客觀的C背景,所以請耐心等待我的新手。如何查詢特定路線的其餘API的朋友帖子

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}); 

      } 
     }); 
    } 
}; 

回答

1

好像你應該存儲的朋友爲用戶的模型集合:

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 */ 
     }); 
    }); 
} 

編輯:添加了代碼需要填充朋友帖子了。

+0

這給了我一個錯誤:throw new Error('嘗試將集合屬性關聯到沒有'+'的模型'+ –

+0

你能發佈整個錯誤嗎?如果它不符合要求這裏只是測試了新的安裝模式代碼,它並沒有給我任何錯誤 –

+0

對不起,它說:[TypeError:無法讀取屬性'id'undefined]。我相信它發生在var userId = req .session.id.friends; line。非常感謝Frederick的幫助! –

0

答案原來是弗雷德裏克的答案和另一個朋友的一些推文的結合。

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}); 

    }); 
    } 

但它仍然沒有完全做到,因爲這只是返回一個好友列表和:ID用戶帖子。我用param而不是session,並改變了find()部分,所以我不知道我是否可以給弗雷德裏克的榮耀的綠色檢查,但肯定有我的upvote。希望這可以幫助任何低級編碼人員!

+0

簡單,我會編輯我的答案哈哈。 –

+0

你值得綠色brothah。 –

+0

Yay互聯網點。快樂的航海 –

相關問題