2

みなさん、こんにちは :) 私の問題は、response.vrite () が機能していないことです。そして別の質問です。各ブート/アップグレード ページを db.open と呼びますか?

var http = require("http");
var Db = require ("mongodb").Db;
var Server = require("mongodb").Server;
function start () {
'use strict';
function onRequest (request, response) {
    'use strict';
    var db = new Db ("TestApp", new Server ("127.0.0.1", 27017, {}));
    response.writeHead(200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"});
    db.open (function (err, db, response) {
        db.collection ('ObjectCollection', function (err, collection) {
            collection.find().toArray (function (err, docs) {
                console.log (docs);
                response.write(JSON.stringify(docs));
            });
        });
    });
    response.end();
}

http.createServer(onRequest).listen(8080);
console.log ('Server has started...')
}exports.start = start;
4

2 に答える 2

2

あなたはあなたresponse.endの前に電話していますresponse.writeresponse.end次のように、呼び出しをコールバック内に移動します。

var http = require("http");
var Db = require ("mongodb").Db;
var Server = require("mongodb").Server;
function start () {
'use strict';
function onRequest (request, response) {
    'use strict';
    var db = new Db ("TestApp", new Server ("127.0.0.1", 27017, {}));
    response.writeHead(200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"});
    db.open (function (err, db, response) {
        db.collection ('ObjectCollection', function (err, collection) {
            collection.find().toArray (function (err, docs) {
                console.log (docs);
                response.write(JSON.stringify(docs));
                response.end();
            });
        });
    });
}

http.createServer(onRequest).listen(8080);
console.log ('Server has started...')
}
exports.start = start;

はい、Dbリクエストごとに新しいオブジェクトが開かれるので、起動時に一度開いたほうがよいでしょう。

于 2012-12-02T05:31:49.033 に答える
1

ジョニーが言ったように、非同期機能の外でresponse.end()を呼び出す。原則として、親関数が内部でどのように機能するかを知らない限り、実際にブロック方式で実行されるコールバックを当てにするべきではありません。DB.openは、接続の完了時にそのコールバックを実行する可能性があり、それにかかる時間はわかりません。DB.Openは非ブロッキングであるため、データベースへのDB.openの非同期呼び出しが完了する前に、ノードはresponse.endを実行します。非同期JavaScriptについて少し読みたいと思うかもしれません

于 2012-12-02T05:46:21.757 に答える