Node.js TypeError:无法调用方法';手柄';未定义的

Node.js TypeError:无法调用方法';手柄';未定义的,node.js,http,express,Node.js,Http,Express,我想使用NodeJS创建一个简单的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

我想使用NodeJS创建一个简单的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)
最近只有我升级了node版本和express,如下所述:

express@4.4.1 节点@0.10.28


有人能解释一下错误在哪里吗?

我想当您将浏览器指向服务器地址和端口时,会出现此错误,对吗? 在这种情况下,通过查看代码,您缺少以下内容:

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);

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

您没有显示完整的代码,因为您的错误与socket.io有关。是的,再次查看错误时,问题确实与socket.io有关,正如@mpm所提到的,但是您的代码并没有告诉您这一点。关于您的信息,我已经提到了上面的完整代码。使用node.js调试器并打开break-on-exception功能,当错误弹出时,检查调用堆栈和变量-尤其是应该定义但没有定义的变量。您的开发操作系统是什么?这不是socket.io问题。io自动劫持http请求,但不是原因。原因是缺少来自express的明确错误消息。至少从express版本4.13.3开始,这是固定的。我没有将浏览器指向服务器地址和端口;我只是在终端上运行上面提到的代码(putty)。你发布的代码就是你正在运行的代码,你得到了那个错误吗这没有任何意义,因为错误中有套接字消息,但代码中没有套接字的跟踪。你发布的代码很好用。试着运行我发布的示例,让我知道您当时遇到了什么错误。我不明白您的意思,您说不需要http库。但在上面使用socket io编写的示例中,您仍然使用了http库。对于socket.io,您需要它。您最初的代码-问题-没有提到任何关于套接字的内容,所以我的第一个代码示例/响应没有考虑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);