2015-07-24 2 views
0

I am Nowfal, программист на C#. Я новичок в Node JS. Когда я создаю функцию и дал в setInterval произошла ошибка, как TypeError: Не удается прочитать свойство «применить» неопределеннойУзел JS setInterval. TypeError: Невозможно прочитать свойство 'apply' of undefined

на обертке [как _onTimeout] (timers.js: 274: 13)

на таймер .listOnTimeout (timers.js: 119: 15)

Мои страницы кода приведены ниже

Page 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 

Page 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; 

Page 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(); 


}; 

Первый раз код правильно, а затем работает показывает сообщение об ошибке, таймер не работает.

Пожалуйста, дайте мне какое-либо решение для этого ... Заранее спасибо ..

+0

Ваш код уязвим для [SQL Injection] (http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about-sql.html). ** НИКОГДА ** не используйте конкатенацию строк для построения SQL-запроса. ** ВСЕГДА ** используйте параметризованный запрос. –

+0

Спасибо Richard Deeming .. Я знаю проблему этого запроса. Когда я реализую это в режиме реального времени, я избегу этого. Но я не мог найти решения для моей реальной проблемы. Можете ли вы мне помочь? –

ответ

-2

Показать код из timers.js. Вы вызываете метод «apply» из неопределенного объекта. Метод «применимо»

+0

Я не написал код для timers.js. Он будет автоматически отображаться в проекте при создании проекта –

Смежные вопросы