2016-03-01 85 views
0

我想要做的是遍歷一個數組中的玉石佈局。佈局文件lessons.jade:節點js + express + jade迭代數組

each lesson in myLessons 
      ul.nav.pull-center: li.dropdown.nav.text-center 
       .btn.btn-default.dropdown-toggle.btn-lg.btn-block(data-toggle="dropdown" aria-expanded="false")= lesson.day 
       ul.dropdown-menu.col-xs-12 
       each lessonName in myLessons 
        li: a(href='/lessons/details')= lessonName.name 
        li.divider 

我的視圖控制器文件lessons.js:

var renderLessonPage = function (req, res, responseBody) { 
    var message; 
    if (!(responseBody)) { 
    message = "Lessons API Error!"; 
    } else { 
    if (responseBody.length < 0) { 
     message = "No lessons found!"; 
    } 
    } 
    res.render('lessons', { 
    title: 'Lesson page', 
    pageHeader: { 
     title: 'Just a page' 
    }, 
    myLessons: responseBody, 
    message: message 
    }); 
}; 



module.exports.lessons = function(req, res) { 
    var requestOptions, path; 
    path = '/api/locations/' + req.params.locationid + '/lessons/'; 
    requestOptions = { 
    url: apiOptions.server + path, 
    method: "GET", 
    json: {} 
    }; 
    request(
     requestOptions, 
     function (err, response, body) { 
     renderLessonPage(req, res , body); 
     } 
); 

}; 

我的API控制文件包含:

var sendJsonResponse = function (res, status, content) { 
    res.status(status); 
    res.json(content); 
}; 

module.exports.lessons = function (req, res) { 
    loc 
     .findById(req.params.locationid) 
     .populate('lessons') 
     .exec(function (err, location) { 
     if (!location) { 
      sendJsonResponse(res, 404, { 
      "message": "No lessons found!" 
      }); 
     } else { 
      response = { 
      location: { 
       lessons: location.lessons 
      // id: req.params.locationid 
      } 
      }; 
      sendJsonResponse(res, 200, response); 
     } 
     }) 
}; 

如果我火了Chrome和瀏覽到API訪問的位置,我看到以下json結果:

{ 
    "location": { 
    "lessons": [ 
     { 
     "_id": "56d5d947bdb5c3d92ace848c", 
     "name": "Henk", 
     "startTime": "13:00", 
     "endTime": "14:00", 
     "day": "Tuesday", 
     "__v": 0 
     }, 
     { 
     "_id": "56d5d9dfea5cbcf42a20f87e", 
     "name": "skaaak", 
     "startTime": "12:00", 
     "endTime": "18:00", 
     "day": "Monday", 
     "__v": 0 
     } 
    ] 
    } 
} 

如果我通過- console.log在我的玉石版面模板中啓用console.log,並在myLessons中獲得教訓,則在控制檯中輸出完全相同的東西。但我不能在我的玉石佈局中使用數組中的值。

我只有一個下拉菜單而不是兩個,文本沒有填充在下拉按鈕上,下拉菜單中有兩個空的項目。

我嘗試了很多東西,但大多數導致undefined或無法讀取的屬性。

+0

是什麼'myLessons'參考你的玉看法?從您的示例對象中,訪問「課程」列表應採用「response.location.lessons」的形式。 – wahwahwah

+0

謝謝!爲了幫助,現在很清楚我做錯了什麼。 – Ralf

回答

0

當您發送結果您的要求

response = { 
    location: { 
     lessons: location.lessons 
    // id: req.params.locationid 
    } 
}; 
    sendJsonResponse(res, 200, response); 

響應的對象,而不是數組。所以當renderLessonPage函數渲染(選項myLessons:響應身體)是對象。

可以如下替換代碼:

response = { 
    location: { 
     lessons: location.lessons 
    // id: req.params.locationid 
    } 
}; 
sendJsonResponse(res, 200, response.location.lessons); 
+0

感謝您幫助我完成代碼,並清除我做錯了什麼!它正在工作! – Ralf

+0

不客氣! – DinhNC