【问题标题】:NodeJS + Socket.io Connection event handler not being called successfully?NodeJS + Socket.io Connection事件处理程序没有被成功调用?
【发布时间】:2015-09-03 16:18:23
【问题描述】:

我在名为 server.js 和 index.html 的文件中有以下代码

由于某种原因,当我在网络浏览器中导航到服务器时,io.on('connection') 部分未在其回调中调用 console.log 方法。

检查下面的代码,它不言自明。 server.js

var express = require('express'),
    app = express(),
    io = require('socket.io')(app.Server),
    mongoose = require('mongoose'),
    bodyParser = require('body-parser'),
    apiRouter = require('./app/routes/api.js');

//Clears Node Console.
process.stdout.write('\033c');
console.log('Server starting!');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(apiRouter);
app.use(express.static('public'));

app.use('*', function(req, res, next) {
    //All requests return single page angular application.
    res.sendFile(__dirname + '/public/index.html');
});

mongoose.connect('localhost', 'triviaattack', function(err) {
    if (err) {
        console.log('An error occured when connecting to the MongoDB Database');
        throw err;
    }
});

io.on('connection', function(socket) {
    console.log('client connected via socket'); //This is the line that isn't being called
});

app.listen(1337, function() {
    console.log('Server started successfully @ ' + Date());
});

index.html

<!DOCTYPE html>

<html ng-app="myApp">
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.4/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.4/angular-route.min.js"></script>
    <script src="./app/app.js"></script>

    <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
    <script>
        var socket = io();
    </script>

</head>
<body>
    <div ng-controller="HomeCtrl">
        {{message}}
    </div>
</body>
</html>

【问题讨论】:

    标签: javascript angularjs node.js socket.io


    【解决方案1】:

    找到答案了。

    必须将 server.js 更改为以下内容,注意顶部附近的新 http 变量。仍然有点好奇为什么只是传递 app.Server 在我原来的帖子中不起作用......哦,好吧。

    var app = require('express')(),
        http = require('http').Server(app),
        io = require('socket.io')(http),
        mongoose = require('mongoose'),
        bodyParser = require('body-parser'),
        apiRouter = require('./app/routes/api.js');
    
    //Clears Node Console.
    process.stdout.write('\033c');
    console.log('Server starting!');
    
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(apiRouter);
    
    app.use('*', function(req, res, next) {
        //All requests return single page angular application.
        res.sendFile(__dirname + '/public/index.html');
    });
    
    mongoose.connect('localhost', 'triviaattack', function(err) {
        if (err) {
            console.log('An error occured when connecting to the MongoDB Database');
            throw err;
        }
    });
    
    io.on('connection', function(socket) {
        console.log('client connected via socket');
    });
    
    http.listen(1337, function() {
        console.log('Server started successfully @ ' + Date());
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多