节点js + express + jade迭代数组
问题描述:
我想要做的是遍历一个数组中的玉石布局。布局文件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
或无法读取的属性。
答
当您发送结果您的要求
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);
是什么'myLessons'参考你的玉看法?从您的示例对象中,访问“课程”列表应采用“response.location.lessons”的形式。 – wahwahwah
谢谢!为了帮助,现在很清楚我做错了什么。 – Ralf