2011-09-29 130 views
10

我遵循了以前一直爲我工作的完全相同的步驟,通過express創建應用程序,將模塊依賴項放置在node_modules文件夾中。它似乎沒有找到socket.io客戶端JavaScript文件。我已經看過其他人的修復,這是將JavaScript文件包含在腳本選項卡中,我不必爲我的前一個節點+ socket.io項目執行此操作)。節點服務器,Socket.io'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) 
+0

先後在加載Socket.io腳本客戶端? –

+0

@Jordan這就是問題所在,它不會在客戶端加載腳本。不過,我試圖去解釋它爲什麼不加載它。 – Jack

+0

看看[在此](http://stackoverflow.com/questions/6785979/socket-io-0-7-7-client-issues-require-socket-io-client-js-not-working) – Marshall

回答

9

在客戶端,你做了嗎:

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

在設置socket變量之前?

+0

謝謝,這已經修復了它。我期望http://cdn.socket.io/stable/socket.io.js可以做到這一點...... – Jack

+1

@Jack:Nah,因爲據我所知,socket.io.js是由您的動態服務服務器及其中的所有必要信息,這就是爲什麼您不必在客戶端自己(端口等)進行任何websocket配置。很高興我能幫上忙。 –

+0

那麼,如果它必須從你打算連接的服務器上加載,那麼使用CDN有什麼意義呢? – Phil

3

我設法忽略了這一點,並浪費了大約一個小時,結果發現這是一個非常基本的錯誤。

當函數未定義?如「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

有樂趣!

+0

如果我點擊了URL,在http:// localhost:4000/socket.io/socket.io.js中沒有任何內容 – prayagupd

2

在客戶端:

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

enter image description here

enter image description here

  1. 使用server.listen()可以固定它;
+7

如果您想回答問題,請將代碼作爲文本傳遞,而不是屏幕截圖。它的正確答案是 –

+0

,這對我有幫助 –

2

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