Я действительно новичок в Node, но в настоящее время у меня есть CMS с открытым исходным кодом NodeJS/Express, и я хотел бы вывести некоторые данные API для приложения, над которым я работаю. Простите меня, если я не использую правильную терминологию или еще что-то, это новое для меня.
Сейчас у меня есть две коллекции, локации и туры. CMS позволяет мне создать отношения между ними. Это просто сохраняет массив ObjectID в записи местоположений для каждой связанной записи тура.
Что я хочу сделать, так это взять мой код вывода API (ниже) и заставить его выводить весь массив туров со всеми полями (название, описание и т. д.) для каждой записи местоположения. В настоящее время он выводит только массив идентификаторов.
Вот мой текущий код:
var async = require('async'),
landmark = require('keystone');
var Location = keystone.list('Location'),
Tour = keystone.list('Tour');
/**
* List Locations
*/
exports.list = function(req, res) {
Location.model.find(function(err, items) {
if (err) return res.apiError('database error', err);
res.apiResponse({
locations: items
});
});
}
/**
* Get Location by ID
*/
exports.get = function(req, res) {
Location.model.findById(req.params.id).exec(function(err, item) {
if (err) return res.apiError('database error', err);
if (!item) return res.apiError('not found');
res.apiResponse({
location: item
});
});
}
Текущий вывод API (усеченный):
{
"locations": [
{
"_id": "53a47997ebe91d8a4a26d251",
"slug": "test-location",
"lastModified": "2014-06-20T20:19:14.484Z",
"commonName": "test location",
"__v": 3,
"url": "",
"tours": [
"53a47963ebe91d8a4a26d250"
],
"images": []
}
]
}
Что я ищу:
{
"locations": [
{
"_id": "53a47997ebe91d8a4a26d251",
"slug": "test-location",
"lastModified": "2014-06-20T20:19:14.484Z",
"commonName": "test location",
"__v": 3,
"url": "",
"tours": [
{
"_id": "53a47963ebe91d8a4a26d250",
"title": "my test tour title",
"url": "url_to_audio_file"
}
],
"images": []
}
]
}
Кто-нибудь знает, возможно ли это? Любая помощь будет оценена по достоинству! Спасибо!
Location
для ссылки наTour
. Вот как я ссылаюсь наTour
в моделиLocation
:Location.relationship({ path: 'tours', ref: 'Tour', refPath: 'location' });
.populate
, похоже, не работает. Вот мой обновленный код, чтобы попытаться получить туры:Location.model.findById(req.params.id).populate({path: 'tours', ref: 'Tour'}).exec(function(err, item) { res.apiResponse({ location: item }); });
23.06.2014