2016-02-09 6 views
0

Это простой запрос на получение, который отображает ошибку «Невозможно установить заголовки после их отправки». Я отправляю его обратно на контроллер, показанный ниже. Он успешно регистрирует содержимое базы данных (doc), поэтому соединения хороши, и это вызывает только эту ошибку при записи строки «res.json (doc)». Также есть альтернатива методу .each()? Это говорит мне, что это устарело.Ошибка Express/Node: невозможно установить заголовки после их отправки

server.js

var app = express(); 

//db connection 
MongoClient.connect("mongodb://userName:[email protected]ws-us-east-1-portal.7.dblayer.com:10712,aws-us-east-1-portal.10.dblayer.com:10316/dbName", function(err, db) { 
    if (err) throw err; 
    var contactList = db.collection("contactList"); 

app.get('/contactList', function (req, res) { 

    var cursor = contactList.find(); 
    cursor.each(function(err, doc) { 
     res.json(doc); 
    }); 

}); 

controller.js

$http.get('/contactList').success(function (response) { 
    $scope.contactList = response; 
}); 
+0

вы отправляете в ответ несколько раз с 'each'function – nada

+0

Вы используете ORM, почему 'find' не является асинхронным? – Festo

ответ

1

нас toArray метод:

app.get('/contactList', function (req, res) { 
    contactList 
    .find({}) 
    .toArray(function(err, docs) { 
     // TODO: Error handling 
     res.json(docs); 
    }); 
} 
+0

Кажется, что отсылка ответа возвращается до того, как массив заполнен «doc». Я все еще не слишком хорошо знаком с тем, как сделать это синхронно. – muninn9

+0

Что вы используете для извлечения данных, mongoDB? – Festo

+0

Я отредактировал сообщение, чтобы включить соединение MongoDB. – muninn9

1

Вы можете вызвать res.json() только один раз. Это ответ, который вы отправляете клиенту.

То, что вы, вероятно, хотите сделать это агрегировать результаты и передать его в качестве одной коллекции