【问题标题】:Don't send data from js object不要从 js 对象发送数据
【发布时间】:2013-08-18 22:54:34
【问题描述】:

我有问题。

从 Chrome 控制台发送。工作。

var composeData = {viewer_user_id: 37247, subject: '321', message: '32131', dialog_id: null};
Node.socket.emit('composeMessage', composeData);

从某个 .js 文件发送。不工作。

    composeMessage: function()
    {
            var dialog_id = ($('#dialog_id').val() == '') ? null : $('#dialog_id').val();
            var to_id = $('#to_id').val();

            if (to_id)
            {
                    var composeData = {viewer_user_id: to_id, subject: $('#subject').val(), message: $('#message').val(), dialog_id: dialog_id};
                    Node.socket.emit('composeMessage', composeData);
            } else
            {
                    $('.messages').notification('empty addressee data', 'error', uniqueid(6));
            }
    }

问题是数据写入 MongoDB,在第一种情况下 - 一切正常,另一种情况 - 没有任何反应,甚至没有错误。

给人的感觉是 onClick 事件添加到了其他一些看不见的数据的对象中。

Node.js 应用程序

index.js:

socket.on('composeMessage', function(clientData) {
    console.log(arguments); // OK!
    IM.testInsert(clientData);
});

IM.js:

testInsert: function(clientData) {
    console.log(clientData); // OK!
    mongo_db.collection('test').insert(clientData, function() {
        console.log(arguments); // Not Working if send data from JS file (client), but work if send data from chrome dev-tool
    });
}

那是通过 WebSocket 看出来的。在第一种情况下(第 1 行)我通过 Chrome 开发工具发送数据,在第二种情况下(第 3 行)通过事件 onClick。如您所见,数据是相同的。

【问题讨论】:

  • 如果您在脚本中发送之前执行console.log(composeData),与从控制台发送时相比,它的格式是否正确?
  • 您的 Node.JS 代码中接收到哪些数据?
  • @Alexander 来自 node.js 应用程序的数据,在这两种情况下 - 相同。选择所有。甚至对象的类型。但通过基于网络的应用程序发送数据后 - 不会写入数据库。
  • @RomanGorbatko 听起来问题出在将数据写入数据库的函数中,您能否将代码发布在您正在执行该操作的位置?您是否尝试过在该函数中使用 log 语句来查看那里的一切是否也正确?
  • 哦,好吧,如果没有其他方法,并且这是与数据库相关的问题,您可以尝试切换到 Mongoose.. 不确定它是否会有所帮助,但谁知道呢?

标签: javascript node.js mongodb socket.io google-chrome-devtools


【解决方案1】:

我想我可以发布我的建议作为答案,即使实际的错误仍然不清楚。

这似乎是与 Mongoskin 相关的问题,切换到 Mongoose 解决了这个问题。

【讨论】:

    【解决方案2】:

    嗯...我在考虑两件事:

    a) 尝试逐个删除属性。这样做你会发现哪一个是有问题的。我对 *dialog_id* 特别感兴趣

    b) 将 *viewer_user_id: to_id* 更改为

    viewer_user_id: parseInt(to_id)
    

    【讨论】:

    • a) {a: 123} - 不工作。 b) 已经尝试过了。它没有用。
    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 2017-07-29
    • 2014-05-16
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多