Я закодировал минималистский сервер для управления службами REST. Предполагается, что только кодированный маршрут будет извлекать данные из mongo, а затем отправить его клиенту. Код ниже.Не удается удалить заголовки после их отправки в Koa
var kr = require('koa-route');
var koa = require('koa');
var app = koa();
var MongoClient = require("mongodb").MongoClient;
var events = function *()
{
var _this = this;
MongoClient.connect("mongodb://localhost/eventdata", function(error, db) {
if (error) throw(error);
console.log("Connecté à la base de données");
db.collection('events').find().toArray(function(err, array)
{
console.log('returning %d objects', array.length);
db.close();
_this.body = {eventsArray : array};
});
});
}
app.use(kr.get('/events', events));
app.listen(3000);
Коа является версия 1.2.4
Когда я пытаюсь достигнуть его, я получаю сообщение об ошибке «Не удается удалить заголовки после их отправки». Мне удалось понять, что программа (вроде) завершает отправку назад ответа до завершения поиска(). Поэтому, когда вызывается _this.body = {...}, это вызывает ошибку.
Теперь вопрос: как это исправить? Я только начал практиковать Коа, поэтому есть много вещей, к которым я не привык.
Я протестировал решение, предлагаемое здесь: Can't remove headers after they are sent, но оно не работает. Появляется следующее сообщение об ошибке:
eventsArray = yield db.collection('events').find({})
^^
SyntaxError : unexpected identifier
Заранее за вашу помощь.
Впечатляет! Не могли бы вы немного объяснить? Думаю, я не совсем понял концепцию «доходности» ... – MrFlo
Рад помочь. Koa - использует функцию генератора в качестве промежуточного элемента. (читайте некоторые о генераторах здесь https://davidwalsh.name/es6-generators) Итак, yiled - как пауза функции генератора. Мы ждем результата обещания, а затем переходим к следующему –
Почти все просто. Большое спасибо !! – MrFlo