【问题标题】:Node.js, express, socket.io app connection errorNode.js、express、socket.io 应用程序连接错误
【发布时间】:2014-05-04 14:32:28
【问题描述】:

我有一个简单的应用程序,它使用 node.js 的 socket.io 模块。 当我使用node express_server.js 命令运行我的服务器时,它可以正常工作,但是当我想在浏览器中打开我的http://localhost:8080 页面时,节点会抛出一个错误:

 /home/tomek/dev/node/node_modules/express/lib/application.js:119
  this._router.handle(req, res, function(err) {
              ^
TypeError: Cannot read property 'handle' of undefined
    at Function.app.handle (/home/tomek/dev/node/node_modules/express/lib/application.js:119:15)
    at Server.app (/home/tomek/dev/node/node_modules/express/lib/express.js:28:9)
    at Manager.handleRequest (/home/tomek/dev/node/node_modules/socket.io/lib/manager.js:565:28)
    at Server.<anonymous> (/home/tomek/dev/node/node_modules/socket.io/lib/manager.js:119:10)
    at Server.EventEmitter.emit (events.js:110:17)
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:504:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
    at Socket.socketOnData (_http_server.js:357:22)
    at Socket.EventEmitter.emit (events.js:107:17)
    at readableAddChunk (_stream_readable.js:156:16)

我的 express_server.js 文件如下所示:

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

var app = express();
server = http.createServer(app);
server.listen(8080);
var io = socket.listen(server);



io.sockets.on('connection', function (client) {
    console.log('-- Client connected --');
});

和 index.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Chat application</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
    var server = io.connect('http://localhost:8080');
</script>   
</body>
</html>

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

    没有定义路由器。在创建应用程序后尝试添加这个(var app = express()):

    app.get('/', function(req, res) {
        // res.send('hello world');
        res.sendfile('index.html');
    });
    

    【讨论】:

    • +1 版,稍作调整。 res.sendfile('index.html');
    【解决方案2】:

    Express 是一个替代“http”模块的框架。您似乎正在尝试同时使用两者。试试这个:

    var express = require('express'),
    var app = express();
    
    app.get('/', function(req, res) {
      res.sendfile('index.html');
    });
    
    var port = Number(process.env.PORT || 8080);
    app.listen(port, function() {
      console.log("Listening on " + port);
    });
    

    感谢 Ben 对 get 方法的推动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多