4

初めて NodeJs プロジェクトに取り組んでいます。そして今、JSを介して値を返し、エクスプレスで使用する値を取得する関数にこだわっています。

var dbitems = "before fn";
function refreshData(callback) {
        db.open(function (err, db) {
            if (!err) {
                db.collection('emp').find().toArray(function (err, items) {
                    dbitems = items;
                    callback(JSON.stringify(items));
                });
            }
            else {
                console.log("Could not be connnected" + err);
                dbitems = {"value":"not found"};
            }
        });

    }
}


refreshData(function (id) { console.log(id); }); 

この関数は、refreshData から完全に値を取得し、コンソールに書き込みます。しかし、私が必要とするのは、取得した値を使用して、「returnedData」によってこの関数からエクスプレス html ファイルに送信することです。

exports.index = function (req, res) {
    var valrs = refreshData(function (id) {
        console.log(JSON.parse(id)); ---this again writes data perfectly in the console
    });
    console.log(valrs); -------------------but again resulting in undefined
    res.render('index', { title: 'Express test', returnedData: valrs });
};

どんな助けでも大歓迎です。

よろしくお願いします、ラッキー。

4

1 に答える 1

5

データベースリクエストの終了後にこれをレンダリングする必要があるため、コールバック内から呼び出す必要があります。

exports.index = function (req, res) {
    refreshData(function (id) {
        res.render('index', { title: 'Express test', returnedData: JSON.parse(id) });
    });
};

非同期であるため、値を並べ替えることはできず、コールバックを実行する必要があります。

于 2012-09-11T04:35:43.113 に答える