我最初爲基本函數創建了一個show route,以從mongodb數據庫(使用mongoose)獲取特定的映射,然後將映射呈現給客戶端一個.ejs模板。根據數組迭代的結果在res.render中提供不同的內容
然後,我想創建功能來收藏地圖並添加到用戶的收藏夾(用戶有自己的模型)。作爲其中的一部分,在下面的演示路線中,我想確保如果用戶已經在他們的收藏夾中有地圖,則在客戶端將呈現不同的內容以反映地圖已經是最喜歡的,而不是繼續顯示選擇收藏某條特定路線的選項。
我一直在嘗試使用的方法顯示在下面的代碼中。這決定了是否存在具有收藏夾的authed用戶(使用passport-local及其req.user功能),然後設計爲遍歷收藏夾並呈現不同的變量(如果用戶已經在收藏夾中有地圖)。
我想問題主要是因爲if/else路由將被調用的數組中的所有項目導致多個res.render調用衝突,這顯然不是我的意圖(它工作正常例如,數組中只有一個項目)。但是,我試圖修改代碼以提供其他路由,但是這仍然存在如何處理fall-through問題,以便在存在authed用戶但其最愛不存在的情況下呈現單獨的內容。
我也試圖迭代ejs模板本身的偏好,使用部分通過ejs-本地人,但這似乎並沒有工作(我懷疑與上述類似的原因)。
所以我想知道的是數組迭代方法是否合適或可行,以及更廣泛的問題是否有更好的方法來顯示不同的內容在相同的路由依賴於某些服務器端變量。
客戶端代碼
<div class="row">
<% if (favourite == "No") { %>
<div class="twelvecol" id="result"><div class="textbox" id="favourite">Favourite this route</div></div>
<% } else { %>
<div class="twelvecol" id="result"><div class="textbox">This route is in your favourites</div></div>
服務器端代碼
// Locates map on basis of ID in url before returning map, stringifying and sending to server
exports.show = function(req, res) {
var mapid = req.query.id;
console.log(mapid);
Map.findOne({_id: req.query.id}, function(err, map) {
var jmap = JSON.stringify(map);
if (req.user && req.user.favourites.length) {
favarray = req.user.favourites;
console.log(favarray);
for (var i = 0; i < favarray.length; i++) {
var favs = favarray[i];
if (favs == mapid) {
console.log('Favourite');
res.render('show', {obj: jmap, user: req.user, favourite: "Yes"})
}
else (favs !== mapid) {
console.log("Authed user but non-favourite")
res.render('show', {obj: jmap, user: req.user, favourite: "No"})
}
}
}
else {
console.log("Either non-authed user or no existing favourites")
res.render('show', {obj: jmap, user: req.user, favourite: "No"});
}
})
};
這是一個很好的答案 - 感謝您花時間。 – Michael