Я изучаю Node.js/Express в настоящее время и столкнулся с довольно странной проблемой. Я чувствую, что в его основе может быть ошибочное понимание копирования массивов/объектов, поэтому я был бы благодарен за любые комментарии, так как, хотя я прочитал этот вопрос, я в тупике.Несоответствие между манипуляциями с данными фиктивных данных и данными db
Я написал две функции, которые в основном принимают массив, манипулируют им и возвращают измененный массив для дальнейшей обработки/для пересылки клиенту. Код на https://gist.github.com/grabbeh/8314291, но общая цель может быть выражена следующим образом:
Работы, как ожидается, с обновленными данными, доступных на стороне клиента
exports.test = function(req, res){
returnDummyData(function(data){
transformData(data, function(data){
res.json(data);
});
});
}
Исходные данные отображаются на стороне клиента в не- трансформировали состояние
exports.test = function(req, res){
returnDBData(function(data){
transformData(data, function(data){
res.json(data);
});
});
}
я исследовал эту проблему и использовали фиктивные данные, чтобы проверить функции, как определено в файле JS. При использовании этих данных им манипулируют различные функции (сначала добавляя свойство ранжирования для каждого объекта, а затем свойство countryRanking), а затем отправляя клиенту с res.json и отображаемый в измененной форме.
Однако, когда я извлекаю эти данные из базы данных MongoDB с помощью Mongoose и запускаю ее через те же функции, когда данные отправляются на сервер, они отправляются в немодулированной форме по причинам, которые я не могу понять. Незнакомец по-прежнему (по крайней мере для меня), манипулируемая форма отображается при доступе непосредственно через console.log, но когда весь объект отображается через console.log, отображается немодифицированный объект, как показано в следующем примере:
Функция в вопросе
Photo.find({ country:'RUS', tag: 'cat', isVoted: true}, function(err, data){
calculatePhotoRanking(data, function(data){
calculateCountryRankings(data, function(data){
// displayed object does not show ranking or countryRanking properties
console.log(data[0])
// however this does display the calculated countryRanking
console.log(data[0].countryRanking)
res.json(data)
});
});
})
Я озадачен о том, как это могло прийти быть откровенно. Я думал, что это может быть связано с тем, что он не меняет названия «данных», когда он проходит через функции при вызове, но изменение на «данные», «dataTwo», «dataThree» не имеет значения.
Премного. Я подозреваю, что мой вопрос является дубликатом вопроса, выделенного выше, но тем не менее вы предоставили четкое решение. Я подозреваю, что мои знания об Мангусте могут сделать с некоторой работой! Благодаря! – Michael