【问题标题】:TypeError : cannot read property 'method' of undefined in nodejs ApplicationTypeError:无法读取 nodejs 应用程序中未定义的属性“方法”
【发布时间】:2016-04-21 21:04:23
【问题描述】:

我正在使用 node.js 和 socket.io 开发一个简单的聊天应用程序。当我连接到 socket.io 时,我会遇到“无法读取未定义的属性‘方法’”的错误。

这里是app.js文件代码:-

var express = require('express'),
    app = express(),
    path = require('path')
    cookieParser = require('cookie-parser')
    session = require('express-session')
    config = require('./config/config.js'),
    ConnectMongo = require('connect-mongo')(session),
    mongoose = require('mongoose').connect(config.dbURL),
    passport = require('passport'),
    FacebookStrategy = require('passport-facebook').Strategy,
    rooms = [] ;
    
 app.set('views', path.join(__dirname , 'views'));
 
 app.engine('html', require('hogan-express'));   
  
 app.set('view engine', 'html');
  
 app.use(express.static(path.join(__dirname,'public')));
  
 app.use(cookieParser());
  
 var env = process.env.NODE_ENV || 'development';
  
 if(env === 'development'){
     // dev specific settings
     app.use(session({secret:config.sessionSecret, saveUninitialized : true, resave : true}));
       
  } else {
      //Production specific settings
      app.use(session({
         secret : config.sessionSecret,
         saveUninitialized : true,
         resave : true, 
         store : new ConnectMongo({
            // url : config.dbURL, (for Avoiding two seperate connection)
             mongooseConnection:mongoose.connections[0],
             stringify : true
         })
      })); 
  }
  
  app.use(passport.initialize());
  app.use(passport.session());
  
  require('./auth/passportAuth.js')(passport , FacebookStrategy , config , mongoose);
  
  require('./routes/routes.js')(express,app ,passport , config);
   
 
 /* app.listen (3000 , function(){
    console.log("ChatUp working on the Port 3000"); 
    console.log('Mode:'+ env);
 }); */
 
 app.set('port', process.env.PORT || 3000);
 
 
 
 var server = require('http').createServer(app);
 var io = require('socket.io').listen(server);
 
 require('./socket/socket.js')(io,rooms);
 
 server.listen(app.get('port' , function(){
     console.log('Chat Up on Port : '+ app.get('port'));
 }))

这是我的 Chatrooms.html 脚本:-

$(function() {
  var host = '{{config.host}}';
  var socket = io.connect(host + '/roomlist'); //   http://localhost:3000/roomlist

  socket.on('connect', function() {
    console.log('Connection Established .. !');
  })
})

JSON 文件包含“主机”:“http://localhost:3000

但是当我运行代码时出现错误:TypeError : cannot read property 'method' of undefined

控制台错误:-

c:\Users\ANKUR SINGH\Desktop\node\Chat App\node_modules\express\lib\router\index.js:138 debug('调度 %s %s', req.method, req.url); ^

TypeError:无法读取未定义的属性“方法”
在 Function.handle (c:\Users\ANKUR SINGH\Desktop\node\Chat App\node_modules\express\lib\router\index.js:138:33)
在 EventEmitter.handle (c:\Users\ANKUR SINGH\Desktop\node\Chat App\node_modules\express\lib\application.js:173:10)
在 Server.app (c:\Users\ANKUR SINGH\Desktop\node\Chat App\node_modules\express\lib\express.js:38:9)
在 Server.g (events.js:260:16)
在 emitNone (events.js:67:13)
在 Server.emit (events.js:166:7)
在 emitListeningNT (net.js:1263:10)
在 nextTickCallbackWith1Arg (node.js:444:9)
在 process._tickCallback (node.js:366:17)
在 Module.runMain [as _onTimeout] (module.js:432:11)
在 Timer.listOnTimeout (timers.js:92:15)

如何摆脱这个错误。 ??

图片:/router/index.js 文件:-

Error picture

【问题讨论】:

  • 你在哪里看到这个错误?
  • 当我使用 Window CMD 运行应用程序时:- node app.js
  • 出现在控制台中:TypeError : cannot read property 'method' of undefined
  • 那么,您是否看到任何其他信息?像行错误在哪里?
  • 请帮帮我#Grundy

标签: javascript jquery node.js


【解决方案1】:

如果你使用 app.js 作为 express 并且 start.js 作为“npm start”,你所要做的就是确保应用程序被导出module.exports = app; 并且你只需要在 start.js 上要求require('./app') 模块可以正常工作。

【讨论】:

    【解决方案2】:

    您的代码可以工作。缺少一个')'

    app.set('port', process.env.PORT || 3000 );
    server.listen(app.get('port') , function(){
    console.log('Chat Up on Port : '+ app.get('port'));
    }); 
    

    【讨论】:

      【解决方案3】:

      经过 9 小时的持续挣扎。我找到了我的问题的解决方案。

      错误代码:-

      app.set('port', process.env.PORT || 3000 );
      
      server.listen(app.get('port' , function(){
           console.log('Chat Up on Port : '+ app.get('port'));
       }));    

      以及正确的代码:-

      var port = process.env.PORT || 3000;
        
        server.listen(port, function () {
          console.log('Updated : Server listening at port %d', port);
        }); 

      参考链接是:- Correct Code reference

      【讨论】:

      • 这实际上没有必要。您的代码中缺少的只是您拥有server.listen(app.get('port' , function(){...,而您应该拥有server.listen(app.get('port') , function(){...。您忘记关闭 app.get('port')。我知道,因为我也遇到了同样的问题 :)。
      【解决方案4】:

      在声明变量的时候你是不是漏掉了一些逗号?

      path = require('path')
      cookieParser = require('cookie-parser')
      session = require('express-session')
      
      path = require('path'),
      cookieParser = require('cookie-parser'),
      session = require('express-session'),
      

      【讨论】:

      • 你是对的,但仍然是同样的问题。同样的错误来了
      • 你检查过 index.js 第 138 行之前 req 的值吗? Proto.handle 必须作为第一个参数传递 null。
      • 如果您有时间检查我的代码和错误,那么您可以查看我的 github 链接
      • 您需要遵循调用堆栈直到调用 Proto.handle。
      • 我跟着发现req=undefind在每个调用栈(局部变量)
      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2022-09-23
      • 2022-11-29
      • 2017-08-30
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多