Node.js TypeError:无法调用方法';手柄';未定义的
我想使用NodeJS创建一个简单的http服务器,它将侦听特定端口。但我面临着这样一个错误: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
/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);