2015-12-01 3 views
3

Использование узла, express, socket.io, jade и углового. Получение ошибки: TypeError: Cannot read property 'apply' of undefined. Какие-либо предложения?"TypeError: Невозможно прочитать свойство 'apply' of undefined

index.js:

module.exports = function(app, res) { 
    res.render('index', { title: 'Express' }); 
    var io = app.get('io'); 
    io.on('connection', function(socket){ 
    }); 
}; 

index.jade:

extends layout 

block content 

script. 
    var app = angular.module('hackigur', []); 
    var socket = io.connect(); 
    var refreshTimer = 10; 

    app.controller('UpdateController', function($scope){ 
     //socket.on('update', function(msg){ 
      //$scope.refreshTimer = msg; 
      //$scope.$apply(); 
     //}); 

     setInterval(secondTick,1000); 

     function secondTick() { 
      if(refreshTimer != 0) { 
       refreshTimer -= 1; 
      } 
      $scope.refreshTimer = refreshTimer; 
      $scope.$apply(); 
     }; 
    }); 

h1= title 
p Welcome to #{title} 

div(ng-controller="UpdateController") 
    p(ng-bind="refreshTimer") 

layout.jade:

 
doctype html 
html(ng-app="hackigur") 
    head 
    title= title 
    script(src = "/socket.io/socket.io.js") 
    script(src = "/js/angular/angular.min.js") 
    body 
    block content 

Полная ошибка:

 
Server listening on port 3000 
TypeError: Cannot read property 'apply' of undefined 
    at Server.(anonymous function) [as on] (D:\Projects\hackigur\node_modules\so 
cket.io\lib\index.js:364:15) 
    at module.exports (D:\Projects\hackigur\server\api\index.js:30:8) at ... 
+0

FYI index.js: 30 - линия: io.on ('connection', function (socket) {... этот код действительно работал прошлой ночью, и я снова попытался сегодня вечером, и он умер. – glog

+0

Не могли бы вы разместить Весь смысл index.js? Кажется, что ошибки происходят в строках, которые вы не включаете в этот вопрос. – Scelesto

+0

Мне просто пришло в голову, что у вас есть несколько index.js (мой плохой). Не могли бы вы хотя бы уточнить, какой index.js вы предоставили? – Scelesto

ответ

4

Мои router, который называется мой index.js прошел app в module.export как таковые:

module.export = function (app) { 
    app.get(... , function(..., res) { 
     require(index.js)(app)(res); 
}; 

мне нужно объявить переменную для app внешних по отношению к моим module.export:

var x; 
module.export = function (app) { 
    x = app; 
     app.get(... , function(..., res) { 
     require(index.js)(x)(res); 
}; 

Не в полной мере понять, почему это работает , но он, похоже, передал правильный app объект app.get, применив вышеуказанное.

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