web-dev-qa-db-ja.com

Node server、Socket.io'io is not defined '?

以前はいつもうまくいったのとまったく同じ手順に従い、Expressを使用してアプリケーションを作成し、モジュールの依存関係をnode_modulesフォルダーに配置しました。 socket.ioクライアント側のjavascriptファイルが見つからないようです。

(JavaScriptファイルをスクリプトタブに含めるという他の人々の修正を見てきました。以前のノード+ socket.ioプロジェクトではこれを行う必要はありませんでした)。

クライアント上のJavaScript:

var socket = io.connect('http://localhost');

サーバー上のJavaScript:

var io = require('socket.io').listen(app);

node_modulesフォルダー:

socket.io, which has an internal node_modules folder containing socket.io-client

エラーメッセージ:

Uncaught ReferenceError: io is not defined
(anonymous function)

socket.ioクライアントを手動で含める場合:http://cdn.socket.io/stable/socket.io.js

別のエラーが発生します:

Uncaught TypeError: Object #<Object> has no method 'connect'
(anonymous function)
13
Jack

クライアントで、あなたはしましたか?

<script src="/socket.io/socket.io.js"></script>

socket変数を設定する前に?

13

私はなんとかこれを失敗し、非常に基本的なエラーであることが判明した何かに約1時間浪費しました。

関数が定義されていない場合は? 「UncaughtReferenceError:io isnotdefined」など。それは、関数が「作成」される前に「使用」されるという意味ではありませんか?

JavaScriptファイルを「呼び出す」HTMLファイルの部分では、次のようになります。

<script src='./js/playerChatter.js'></script> <!-- this one calls io -->
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!--ThisCreatesio-->

そして私はそれをこれに変更しました

<script src="http://localhost:2019/socket.io/socket.io.js"></script> <!--ThisCreates io-->
<script src='./js/playerChatter.js'></script> <!-- this on calls io -->

これで、アイテム「io」は、オブジェクトであろうと関数であろうと、実際に使用される前に作成されます:D

楽しんで!

3
Mat-e

Node.js初心者はこちら!私はこれが答えられたとかなり確信しています。それでも、ソケットのsrcに問題がありました。どうやらこれ:<script src="/socket.io/socket.io.js">クライアント側では機能していませんでした。

上記の行をこれに置き換えましたが、正常に機能しているようです。

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>

(編集:これは明らかですが、この回答を読んでいる時期によっては、このリンクが機能しない場合があります。最新のリンクを選択してください: https://cdnjs.com/libraries/socket.io

これが機能するクライアントサイドコードです:

<body>

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>

<script>
    $(function(){
        var socket = io('http://localhost:8080');
        console.log("Socket connected"+socket.connected);

        socket.on('notification', function(value){
            //insert your code here
        });
    });

</script>

サーバー側(1つのソケットのみを処理します)

var app  = require('express')();
var http = require('http').Server(app);
var io   = require('socket.io')(http);
var port = process.env.PORT || 8080;


app.get('/', function(req, res){
    console.log("app works");
});

io.on('connection', function(socket){
    socket.emit('notification', {message:"hi"});
});

http.listen(port, function(){
    console.log('listening on :' + port);
});
3
adityah

クライアント上:

<head>
<script src="http://localhost/socket.io/socket.io.js"></script>
</head>
2
Kaushik Makwana