TypeError:无法调用未定义的方法'handle'

时间:2014-06-20 08:29:10

标签: node.js http express

我想使用将侦听特定端口的节点js创建一个简单的http服务器。但是我面临着一个看起来像这样的错误:

/usr/local/lib/node_modules/express/lib/application.js:123
  this._router.handle(req, res, function(err) {
               ^
TypeError: Cannot call method 'handle' of undefined
    at Function.app.handle (/usr/local/lib/node_modules/express/lib/application.js:123:16)
    at Server.app (/usr/local/lib/node_modules/express/lib/express.js:28:9)
    at Manager.handleRequest (/home/node/node_modules/socket.io/lib/manager.js:565:28)
    at Server.<anonymous> (/home/node/node_modules/socket.io/lib/manager.js:119:10)
    at Server.EventEmitter.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2108:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23)
    at Socket.socket.ondata (http.js:1966:22)
    at TCP.onread (net.js:527:27)

以下是我写的代码:

var express = require('express'); 
var http = require('http'); 

var app = express();
var server = http.createServer(app);

server.listen(1200);

最近我只升级了节点版本并表达如下所述:

表达@ 4.4.1 node @ 0.10.28

请问任何人可以解释错误的位置吗?

1 个答案:

答案 0 :(得分:0)

我认为当您将浏览器指向服务器地址和端口时会出现此错误,对吧? 在这种情况下 - 从查看代码 - 你遗漏了这样的东西:

app.get('/', function(req, res, next) {
    res.send(200, "All set");
});

此外,不需要http库:

var express = require('express'),
    app = express();

app.get('/', function(req, res, next) {
    res.send(200, "All set");
});

app.listen(1200);

应该有效。请告诉我。

以下是socket.io的一个工作示例:

var express = require('express'),
    app = express(),
    server = require('http').Server(app),
    socket = require('socket.io')(server);

app.get('/', function(req, res, next) {

    socket.on('connection', function (socket) {
        socket.join('chatRoom');
    });

    socket.sockets.in('chatRoom').emit('message', 'Welcome in this room.');

    res.send(200, "All set");
});

app.listen(1200);

您仍然需要定义逻辑来拦截客户端上发出的事件。