2

ローカルマシンのChromeブラウザをsocket.ioを使用してリモートノードサーバーに接続しようとしています。私はexpressjsを使用してノードサーバーからすべてのファイルを提供しているので、htmlファイルとjsファイルを含むパブリックディレクトリがあります(npmから取得したnode_modulesの下にsocket.ioファイルへのシンボリックリンクを作成しました)。

私が抱えている問題は、Chromeがindex.htmlをプルすると、次のエラーが発生することです。

Uncaught ReferenceError:requireが定義されていませんsocket.io.js:12 Uncaught ReferenceError:ioが定義されていません

他のいくつかの投稿と同じようにcdnを試しましたが、別の問題が発生しました。多くの投稿がこのアプローチを支持しているので、なぜそれがnodejsのものを解決しないのかわかりません。何か案は?

私のindex.htmlは次のようになります。

<html>
<head>
</head>
<body>
<script src="http://nodeserver:8080/socket.io/lib/socket.io.js"></script>

<script>
  var socket = io.connect('http://nodeserver:8080');
  socket.on('', function (data) {
    console.log(data);
    socket.emit('update checkins', { my: 'data' });
  });
</script>
<h2>Test Page</h2>
</body>
</html> 

私のサーバーコードは次のようになります。

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

    // Get the environment variables we need.
    var ipaddr = process.env.VCAP_APP_HOST || 'myserver.com';
    var port = process.env.PORT || 8080;

    app.configure(function() {
        app.use(express.bodyParser());
        app.use(express.methodOverride());
        app.use(app.router);
        app.use(express.static(__dirname + '/public'));
    });

// set up the RESTful API, handler methods are defined in api.js
    var api = require('./controller/api.js');
    app.get('/foursq', api.list);

// Set Socket.io
    io.sockets.on('connection', function (socket) {
        console.log('Socket created...');
        socket.emit('welcome', {welcome: 'you'});
        socket.on('update checkins', function (msg) {
            socket.broadcast.emit('checkins', api.list);
        });
    });

    // And start the app on that interface (and port).
    app.listen(port, ipaddr, function () {
        console.log('%s: Foursquare Node server started on %s:%d ...', Date(Date.now()),
            ipaddr, port);
    });
4

1 に答える 1

2

問題は、元のコードが app オブジェクトをリッスンしていたことですが、ソケットを追加するためにコードを更新したときに、次のように server.listen として変更するのを怠っていました。

server.listen(port, ipaddr, function () {
    console.log('%s: Foursquare Node server started on %s:%d ...', Date(Date.now()),
        ipaddr, port);
});

これにより、ビリーが指摘するように何もコピーすることなく、次のようにスクリプト インクルードを簡単に配置できます。

<script src="/socket.io/socket.io.js"></script>
于 2012-08-30T19:16:22.580 に答える