TypeError:无法在nodejs Application中读取未定义的属性'method'

Ank*_*ngh 0 javascript jquery node.js

我正在使用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'));
 }))
Run Code Online (Sandbox Code Playgroud)

这是我的Chatrooms.html srcipt: -

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

  socket.on('connect', function() {
    console.log('Connection Established .. !');
  })
})
Run Code Online (Sandbox Code Playgroud)

JSON文件包含"host":" http:// localhost:3000 "

但是当我运行代码时出现错误:TypeError:无法读取未定义的属性'method'

控制台错误: -

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

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


如何摆脱这个错误.??

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

错误图片

Ank*_*ngh 6

经过9个小时的连续奋斗.我找到了我的问题的解决方案.

错误代码: -

app.set('port', process.env.PORT || 3000 );

server.listen(app.get('port' , function(){
     console.log('Chat Up on Port : '+ app.get('port'));
 }));    
Run Code Online (Sandbox Code Playgroud)

和正确的代码: -

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

参考链接是: - 正确的代码参考

  • 那其实是没有必要的。你的代码中缺少的只是你有 `server.listen(app.get('port' , function(){...`,而你应该有 `server.listen(app.get('port') ) , function(){...`. 你忘了关闭 app.get('port'). 我知道,因为我刚遇到同样的问题:)。 (3认同)