Pytanie Serwer węzłów, Socket.io 'io nie jest zdefiniowany?


Podążałem dokładnie tymi samymi krokami, które zawsze wcześniej dla mnie działały, tworzyłem aplikację za pomocą ekspresu, umieszczałem zależności modułów w folderze node_modules. Wygląda na to, że plik javascript po stronie klienta socket.io nie został znaleziony.

(Przyjrzałem się innym rozwiązaniom, które obejmują plik JavaScript w zakładce skryptu, nie musiałem tego robić dla poprzednich projektów node + socket.io).

JavaScript na kliencie:

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

JavaScript na serwerze:

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

folder node_modules:

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

Komunikat o błędzie:

Uncaught ReferenceError: io is not defined
(anonymous function)

Kiedy ręcznie dołączam klienta socket.io: http://cdn.socket.io/stable/socket.io.js

Otrzymuję inny błąd, który jest:

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

10
2017-09-29 20:47


pochodzenie


Czy do klienta załadowany jest skrypt Socket.io? - Jordan Running
@Jordan To jest problem, nie ładuje skryptu na kliencie. Próbuję jednak dowiedzieć się, dlaczego go nie ładuje. - Jack
Spójrz w tym - Marshall


Odpowiedzi:


Czy na kliencie zrobiłeś:

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

zanim ustawisz socket zmienna?


9
2017-09-29 21:24



Dzięki, to naprawiło. oczekiwałem cdn.socket.io/stable/socket.io.js zrobić lewy ... - Jack
@Jack: Nah, ponieważ o ile mi wiadomo, plik socket.io.js jest obsługiwany dynamicznie przez twój serwer z wszystkimi niezbędnymi informacjami, dlatego nie musisz wykonywać żadnej konfiguracji websocket po stronie klienta siebie (port itp.). Cieszę się, że mogłem pomóc. - Jorge Israel Peña
Jaki jest sens używania CDN, jeśli MUSI być załadowany z serwera, z którym chcesz się połączyć? - Phil


Udało mi się to przezwyciężyć i zmarnowałem około godziny, na czymś, co okazało się bardzo podstawowym błędem.

Kiedy funkcja nie jest zdefiniowana? Takich jak "Uncaught ReferenceError: io nie jest zdefiniowane". Czy to nie oznacza, że ​​funkcja jest "używana", zanim zostanie "stworzona"?

W części mojego pliku HTML "wywołuje" pliki javaScript, wygląda to tak:

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

i zmieniłem to na to

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

A więc teraz element "io", czy jest to obiekt czy funkcja ... Właściwie jest tworzony zanim się przyzwyczaja: D

Baw się dobrze!


3
2018-04-22 05:19



W środku nie ma nic http://localhost:4000/socket.io/socket.io.js jeśli uderzę w URL - prayagupd


Na kliencie:

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

2
2018-01-19 06:26





Nowości Node.js tutaj! Jestem prawie pewien, że na to odpowiedziano. Jednak ciągle znajdowałem problemy z src dla gniazda. Najwyraźniej to: <script src="/socket.io/socket.io.js"> nie działa dla mnie po stronie klienta.

Wymieniłem powyższą linię na tę i wydaje się, że działa dobrze.

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

Oto działający kod po stronie klienta:

<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>

Po stronie serwera (obsługuje tylko 1 gniazdo)

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

2
2018-04-11 05:47





enter image description here

enter image description here

  1. Użyj server.listen () można naprawić;

-2
2017-12-06 12:23



Jeśli chcesz odpowiedzieć na pytanie, przekaż kod jako tekst nie jako zrzut ekranu. - Petter Friberg
poprawna odpowiedź, pomogło mi to - Naval Kishor Jha