无法阅读财产&#39; <fieldname>&#39;运行一段时间后为null

时间:2016-04-20 10:03:34

标签: javascript angularjs node.js sockets

我有一个angularjs网站,其中NodeJS套接字方法作为客户端,NodeJS应用程序作为服务器。

数据正通过套接字事件从服务器传递到客户端。问题是,在工作正常约5分钟后,间歇性地从NodeJS服务器发送的数据正在被接收为&#39; null&#39;在网站上,因此给我以下错误:

angular.js:11598 TypeError: Cannot read property '<fieldName>' of null
    at ecabsAngular.js:42
    at angular.js:12149
    at angular.js:12137
    at angular.js:12137
    at Object.<anonymous> (angular.js:12837)
    at l.$digest (angular.js:14222)
    at l.$apply (angular.js:14493)
    at Socket.<anonymous> (ecabsAngular.js:275)
    at Socket.Emitter.emit (socket.io-1.2.0.js:1)
    at Socket.onevent (socket.io-1.2.0.js:1)

您是否知道造成这种情况的原因以及如何解决这个问题?

提前致谢!

编辑: 这是在客户端(在网站上)崩溃的代码

(function(){
    var app = angular.module('Module', []);

app.controller('MainCtrl', ['$scope', '$window', function($scope, $window){
            $scope.bookings = [];

            socket.on('updateBooking', function(booking){
                $scope.loadAllocations();
                for (var i=0; i<$scope.bookings.length; i++) {
                    if ($scope.bookings[i].CRMBookingID == booking.CRMBookingID) {
                        $scope.$apply(function(){
                            $scope.bookings[i] = booking;                           
                        });
                    }
                }
            });
        }
    ]);

})();

这是NodeJS(服务器)的代码:

var app = require('express')();
var http = require('http');
http.globalAgent.maxSockets = 200;
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var sql = require('mssql');
server.listen(3000);                       

app.post('/updatebooking', function(request, response)                      // receive web service request
{
    response.writeHeader(200, {"Content-Type": "text/plain"});              // build response header
    response.end();                                                         // end the response
    request.on('data', function(changes) 
    {
        try{
            var c = JSON.parse(changes.toString());                         // parse data received
            var connection = new sql.Connection(config);                    // create DB connection

            connection.connect(function (err)                               // connect to the database
            {
                if (err!=null) {   logger.error('Update booking connection error: ' + c + ' ' + err);   }

                var request = new sql.Request(connection);                  // create SQL request
                request.stream = true; 

                try{
                    var sqlquery = <sqlquery>;                              // build SQL query
                    logger.trace("Executing SP in DB: " + sqlquery);
                    request.query(sqlquery);                                // execute SP
                    request.on('row', function (row)                        // once committed send to the client (website)
                    {
                        logger.trace("Updated booking with Reference ID " + row.Ref + " " + sqlquery);
                        io.emit('updateBooking', row);                      // sending data
                    })
                    request.on('error', function(err) {
                        logger.error('Update booking SP request error: ' + sqlquery + err);
                    });
                }catch( e){
                    logger.error('Update booking request error' + sqlquery + ' ' + e);
                }

            }); 
        } catch(e)
        {
            var c = JSON.parse(changes.toString());
            logger.error('Update booking error for: ' + c + ' ' +e);
        }
        connection.on('error', function(err) {
            logger.error('Update error connection: ' + err);
        });
    });
});

0 个答案:

没有答案