【发布时间】:2015-07-24 08:27:12
【问题描述】:
我是 Nowfal,一个 c# 程序员。我是 Node JS 的新手。 当我创建一个函数并在 setInterval 中给出一个错误时,发生了 TypeError:无法读取未定义的属性“应用”
在包装器 [as _onTimeout] (timers.js:274:13)
在 Timer.listOnTimeout (timers.js:119:15)
我的代码页如下所示
第 1 页(Server.js)
var db = require('./dbConnect.js');
var ins = require('./dbInsert.js');
var tagId = [];
var schoolInfoId = [];
var imeNo = [];
var totalRows = 0;
function ViewQuery() {
var mysql = db.mysql;
var connection = db.createMyConnection();
connection.connect();
var mycommand = "SELECT t.skha_tag_id_no,s.skha_school_info_id,a.skha_out_device_imeno" +
" FROM skha_tag t INNER JOIN skha_student_info s on skha_tag_id = skha_student_tag_id_no " +
" INNER JOIN skha_student_school_attendance a on a.skha_student_info_id = s.skha_student_info_id" +
" WHERE DATE(skha_student_in_time) = CURDATE() AND skha_student_out_time IS NULL and skha_out_status = 1 ";
connection.query(mycommand, function (err, rows) {
if (!err) {
var result;
for (i = 0; i < rows.length; i++) {
totalRows++;
result = rows[i];
tagId.push(result['skha_tag_id_no']);
schoolInfoId.push(result['skha_school_info_id']);
imeNo.push(result['skha_out_device_imeno']);
}
for (i = 0; i < totalRows; i++) {
ins.insertDB(tagId[i], schoolInfoId[i], imeNo[i]);
}
}
else
console.log('Error while performing Query.');
});
connection.end();
};
setInterval(ViewQuery(),30000); //Error Generating from here
第 2 页(dbConnect.js)
var mysql = require('mysql');
exports.createMyConnection = function createMyConnection() {
var connection = mysql.createConnection( {
host : '192.168.0.175',
user : 'ss_user',
password : 'df33-ccff2188',
database : 'shkaliasdb',
multipleStatements: true
});
return connection;
}
exports.mysql = mysql;
第 3 页 (dbInsert.js)
var db = require('./dbConnect.js');
var logOutTimeInterval = 5;
exports.insertDB = function (RFID, schoolID, imei) {
var mysql = db.mysql;
var connection = db.createMyConnection();
connection.connect();
console.log('IMEI : ' + imei);
console.log(RFID);
str = "SET @OutStatus=0;SET @logOutTime=0;call out_mark_save_two_device('" + RFID + "'," + schoolID + "," + logOutTimeInterval + ",@OutStatus,@logOutTime," + imei + ")";
console.log(str);
connection.query(str, function (err, rows, fields) {//, fields
if (err)
console.log('Error while performing Query.' + err);
else {
console.log(rows[0]);
}
});
connection.end();
};
第一次代码正常工作,然后显示错误消息,计时器不工作。
请给我任何解决方案... 在此先感谢..
【问题讨论】:
-
您的代码容易受到SQL Injection 的攻击。 从不 使用字符串连接来构建 SQL 查询。 总是使用参数化查询。
-
感谢 Richard Deeming.. 我知道这个查询的问题。当我实时实现这一点时,我会避免这种情况。但是,我无法为我的实际问题找到任何解决方案。你能帮我吗?
标签: .net node.js timer error-handling