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
ですが、私はエラーメッセージが「それらが送られた後、ヘッダを削除することはできません」を取得します。 find()の前に応答を返すようにプログラム(sort of)が終了したことを理解しました。したがって、_this.body = {...}が呼び出されると、エラーが発生します。
今問題を解決するにはどうすればよいですか? 私はちょうどKoaを練習し始めたので、慣れていないものがたくさんあります。
私がここで提案したソリューションをテストしました:Can't remove headers after they are sentしかし、動作しません。あなたの助けを事前に
eventsArray = yield db.collection('events').find({})
^^
SyntaxError : unexpected identifier
ありがとう:私は、次のエラーメッセージが表示されます。
印象的なこの方法で試してみてください!少し説明していただけますか?私は "収率"の概念を完全に理解していなかったと思います... – MrFlo
助けてくれてうれしいです。 Koa - ミドルウェアとしてジェネレータ機能を使用しています。 (ジェネレータについてはhttps://davidwalsh.name/es6-generatorsを参照してください) ジェイルはジェネレータ機能の一時停止のようです。私たちは約束の結果を待っていて、次に行く。 –
ほとんどすべて。どうもありがとう !! – MrFlo