Node.js mysql查询和网络连接

时间:2014-12-19 16:05:50

标签: javascript mysql node.js

我有一个node.js脚本,它接收来自电话系统的SMDR数据,然后将其插入数据库。我现在的代码现在插入除OperatorID之外的所有内容(它将[object Object]插入到该列中)。我无法弄清楚为什么会这样。有什么想法吗?

var net = require('net'),
   mysql = require('mysql'),
   PORT = 1752,
   HOST = '192.168.10.2',
   pool = mysql.createPool({
       host: 'localhost',
       port: 3306,
       user: 'root',
       password: 'root',
       database: 'mydb'
   });

function connectionListener(conn) {
    console.log('Listening for incoming calls...');
}

function logCall(phonenumber, operator) {
    pool.getConnection(function(err, connection) {
        if (!err) { // If no error exists 
            //var operID = '';
            var opquery = connection.query('SELECT OperatorID FROM tblOperators WHERE Phone_Login = ' + operator, function(err, rows) {
                if (err) {
                    console.error(err);
                }
                //operID = rows[0];
                //console.log(operID);
                console.log(rows[0]); //logs on console okay
                var query = connection.query('INSERT INTO incoming_calls(phone_number, OperatorID) VALUES("' + phonenumber + '", "' + rows[0] + '") ON DUPLICATE KEY UPDATE OperatorID=OperatorID, date_created=NOW()', function(err, rows) {//fails to insert rows[0]
                    if (err) {
                        console.error(err);
                    }
                    connection.release();
                });
            });
        } else {
            console.error(err);
        }
    });
}

function processdata(data) {
    var phonedata = data.toString().match(/([0-9]?)([0-9]{10})/),
    operdata = data.toString().match(/([*])([0-9]{4})/);
    if (phonedata !== null && operdata !== null) {
        var phonenumber = phonedata[2],
        oper = operdata[2];

       oper = oper.replace('*', '');
       //phonenumber = phonenumber.slice(0,3)+"-"+phonenumber.slice(3,6)+"-"+phonenumber.slice(6);
       logCall(phonenumber, oper);
    }
};

logCall('999-999-9999', '1203'); //where 1203 is valid
var conn = net.createConnection(PORT, HOST, connectionListener);
conn.on('data', processdata);
conn.setEncoding('utf8');

1 个答案:

答案 0 :(得分:2)

您需要指定

rows[0].OperatorID

在您的INSERT查询中,因为您正试图立即插入整行,这是一个对象。

var query = connection.query('INSERT INTO incoming_calls(phone_number, OperatorID) VALUES("' + phonenumber + '", "' + rows[0].OperatorID + '") ON DUPLICATE KEY UPDATE OperatorID=OperatorID, date_created=NOW()', function(err, rows) {//...