Node сервер, Socket.io 'io не определен'?

Я выполнял те же самые шаги, которые всегда выполнялись для меня, создавали приложение через express, размещали зависимости модуля в папке node_modules. Похоже, что файл javascript на стороне клиента socket.io не найден.

(Я рассмотрел исправления других людей, которые включают файл JavaScript на вкладке script. Мне не приходилось делать это для моих предыдущих проектов node + 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)

Ответ 1

На клиенте вы сделали:

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

перед установкой переменной socket?

Ответ 2

Мне удалось промахнуться через это, и растратил около часа, на что-то, что оказалось очень простой ошибкой.

Когда функция не определена? Например, "Uncaught ReferenceError: io не определен". Не означает ли это, что функция "используется" до того, как она "создана"?

В части моего HTML файла, который "вызывает" файлы javaScript, это выглядит так:

<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

У FUN!

Ответ 3

На клиенте:

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

Ответ 4

Node.js новичок здесь! Я уверен, что на это был дан ответ. Тем не менее я продолжал искать проблемы с src для сокета. По-видимому это: <script src="/socket.io/socket.io.js"> не работал у меня на стороне клиента.

Я заменил вышеприведенную строку этим и, похоже, работает нормально.

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

Вот рабочий код на стороне клиента:

<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);
});

Ответ 5

enter image description here

enter image description here

  • Использовать server.listen() можно исправить;