2016-02-15 3 views
0

У меня есть doozy, что я не могу понять, что происходит.Nodejs не отправляет ответ на Angular?

  1. В Mongo, я делаю document.find(), который возвращает массив объектов/s - все хорошо.
  2. Затем я пытаюсь отправить на два объекта обратно в Угловой контроллер, объект документа/с и длину массива объектов.

Код:

function loadConnections(req, res) { 
getConnections(req.user) 
.then(function(results){ 
    console.log('here'); 
    console.log(results); 
    console.log(results.length); 

    var returnObject = {} 
    returnObject.count = results.length; 
    //returnObject.results = results[0]; // PROBLEM LINE 
    res.status(200).send(returnObject); 
}); 
} 

Проблема я столкнулся. В этом случае он возвращает массив с 1 объектом. Массив выглядит следующим образом:

[{id: XXX, test: YYY, test1: ZZZ}] 

Это было то, что я испытанный:

returnObject.results = results[0].id; // works 
returnObject.results = results[0].test; // works 
returnObject.results = results[0].test1; //works 
returnObject.results = results[0]; // doesn't work 
returnObject.results = results; //doesn't work 

Но если я пытаюсь передать весь объект или весь массив, он натыкается на проблему и Безразлично Не отправляйте ответ контроллеру.

Любые мысли?

+0

Что значит «не работает»? каково значение returnObject.results, когда вы назначаете результаты [0]? –

+0

Записывает объект: {id: XXX, test: YYY, test1: ZZZ} –

ответ

0

Оказывается, это была моя lodash библиотека. Я использовал _.pluck и где-то по пути, он перестает работать. Пришлось обновить его до _.map.

0

Если вы используете экспресс, попробуйте сделать

res.send(200, returnObject); 

или

res.json(200, returnObject); 

, который должен сделать трюк!

+0

Дал выстрел, но не работал, плюс получил предупреждение о том, что он устарел. –

0

Лично я бы просто вычислил длину массива после того, как он прибыл в мой Угловой клиент, а не на сервере. Тем не менее, вы должны быть в состоянии сделать то, что вы пытаетесь сделать, это сделать:

var returnObject = { 
    'count': results.length, 
    'results': results 
}; 
res.json(returnObject); 

Вот документ: http://expressjs.com/en/api.html#res.json

Кроме того, только для общего поиска и устранения неисправностей, то первое, что вы хотите сделать, это цифра где начинается несогласованность. Действительно ли данные выглядят правильно на сервере перед отправкой ответа? Правильно ли данные выглядят на клиенте, когда ваш обработчик API получает ответ? (Я предполагаю $ resource, или, может быть, вы используете $ http). Для этого добавьте строку, как это просто, прежде чем отправить ответ от сервера, а затем добавить аналогичную линию только после того, как вы получите ответ в клиенте:

console.log(JSON.stringify(returnObject, null, 2)); 
+0

OK ... поэтому добавили два журнала перед отправкой, как вы предложили. Один только регистрирует returnObject, другой журнал с строкой. Строгий журнал не регистрирует ничего. Что это значит? –

+0

Это кажется действительно странным. Вы уверены, что не было опечатки или чего-то еще? Вы не нуждаетесь в **, чтобы укрепить его, что упрощает чтение. Главное было сделать журнал непосредственно перед отправкой и журнал сразу после получения (на клиенте). – tutley

+0

100% положительный. Нет орфографических ошибок.Я даже попытался изменить значения объектов на жесткий текст, а затем вывести его. Кажется, что ему не нравится отправлять весь объект. –

Смежные вопросы