1

コントローラーでデータベースを照会している単純な販売アプリがあります。結果を取得し、async.each 関数を使用してデータを操作し、配列をビューに送信します。

私のログは配列内のデータを表示していますが、私のビューは空の配列を受け取っています。

"index": function(req, res, next) {
    Sales.find().sort("createdAt DESC").done(function(err, sales) {
        if (err) {
            res.send("An error has occured. :(");
        } else {
            if (!sales) {
                req.session.flash = {
                    err: {
                        message: "You have no billing as of now.",
                        style: "alert-info"
                    }
                }
            } else {

                var bills = [];

                async.eachSeries(sales, function(thisSale, callback) {
                    if (!bills[thisSale.billingNo]) {
                        bills[thisSale.billingNo] = {
                            id: thisSale.billingNo,
                            createdAt: thisSale.createdAt,
                            total: (thisSale.quantity * thisSale.price),
                            location: thisSale.location,
                        };
                    } else {
                        bills[thisSale.billingNo].total += (thisSale.quantity * thisSale.price);
                    }
                    callback();
                }, function(err) {
                    if (err) {
                        console.log('Something went wrong !');
                        exit();
                    } else {
                        res.send({
                            billing: bills
                        });
                        console.log("=====\nBILL\n=====\n", bills);
                    }
                });
            }
        }
    });
},

res.view を res.send に置き換えてコードをデバッグしましたが、クライアント側ではこれしか受け取りません。

{
  "billing": []
}

コンソール ログには次のように表示されますが、

=====
BILL
=====
 [ '53b95fdc1f7a596316f37af0': { id: '53b95fdc1f7a596316f37af0',
    createdAt: Sun Jul 06 2014 20:10:28 GMT+0530 (IST),
    total: 6497,
    location: 'Location A' },
  '53b8f7c81f7a596316f37aed': { id: '53b8f7c81f7a596316f37aed',
    createdAt: Sun Jul 06 2014 12:46:24 GMT+0530 (IST),
    total: 6497,
    location: 'Location A' } ]

誰かが私が間違っていることを理解するのを手伝ってくれますか?

4

2 に答える 2

1

問題をデバッグしようとしたところ、bills[0] にアクセスできず、配列 bills で forEach ループを使用して、for each ループを実行できないことがわかりました。

変数 bills を配列からオブジェクトに変更すると、問題が修正されました。

なぜこれが起こったのか、なぜ配列に変数を追加するのに問題があったのか完全にはわかりませんが、

var bills = [];

var bills = {};

問題を修正しました。

于 2014-07-06T17:03:47.850 に答える