【发布时间】: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