Javascript Sails.js应用程序变量数据未显示在视图中,即使日志显示了它

Javascript Sails.js应用程序变量数据未显示在视图中,即使日志显示了它,javascript,node.js,sails.js,sails-mongo,Javascript,Node.js,Sails.js,Sails Mongo,我有一个简单的销售应用程序,我在控制器中查询数据库。检索结果,使用async.each函数对数据执行一些操作,然后将数组发送到视图 即使我的日志显示数组中的数据,我的视图也接收到一个空白数组 "index": function(req, res, next) { Sales.find().sort("createdAt DESC").done(function(err, sales) { if (err) { res.send("An error

我有一个简单的销售应用程序,我在控制器中查询数据库。检索结果,使用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' } ]

有人能帮我找出我做错了什么吗?

我试图调试问题,发现我无法访问账单[0],然后在账单阵列上使用forEach循环,发现它无法运行for each循环

将可变账单从数组更改为对象时,问题得到了解决

我不完全清楚为什么会发生这种情况,或者为什么我在向数组中添加变量时遇到问题,但在更改

var bills = [];


修复了该问题。

也许您来自PHP背景,其中“关联数组”是有效的类型?在Javascript中,数组只能由整数索引,例如

Javascript数组与所有非原语类型一样,都是对象实例,因此它们可以添加任意属性,这让人有些困惑:

bills.abc = 123;
bills["some arbitrary string"] = 555;
但由于以下诸多原因,强烈建议您不要以这种方式使用阵列:

  • JSON.stringify()
    将忽略非整数索引,这就是问题的原因。Sails(以及许多其他库)使用
    JSON.stringify()
    序列化Javascript对象以进行传输
  • Javascript数组有几个保留键,如
    length
    push
    pop
    ,这些键不能赋值
  • 数组的
    length()
  • 以这种方式使用数组是令人困惑的;这就是普通对象(用
    {}
    声明)的用途
希望这能解释为什么更改为
var-bills={}
可以让一切正常工作

bills[0] = "something";
bills.abc = 123;
bills["some arbitrary string"] = 555;