2013-05-11 171 views
0

我創建了一個基本的node.js服務器程序,並使用socket.io從客戶端傳遞了一些字段數據(請參見下文)。因爲我是這個行業的新手,所以相當讚賞。我喜歡這個node-express-socket.io方法作爲它的所有Javascript,並且顯然可以被大多數瀏覽器(包括'mobile')使用。問題是我有點摸不着頭腦,不能完全理解我創造的東西!兩個問題...Node.js - socket.io web應用程序

1)我需要使用「//ajax.googleapis.com ... jquery ...」嗎?這很煩人,因爲瀏覽器需要連接互聯網才能工作。有沒有另一種方式訪問​​HTML文檔元素,而無需互聯網連接?

2)什麼的 「app.use(express.static ....」 行辦呢? 「app.get ...」 功能似乎需要這個工作。

如果有任何關於我的代碼等一般性意見請讓我擁有它

乾杯,

Kirbs

客戶端代碼:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect(document.location.protocol+'//'+document.location.host); 
    function clicked(){ 
     $(function(){ 
      var makeInput=$('.app').find('#make').val(); 
      var modelInput=$('.app').find('#model').val(); 
      socket.emit('make', makeInput); 
      socket.emit('model', modelInput); 
     });  
    }; 
</script> 

服務器端代碼:

var express = require('express'); 
var http = require('http'); 
var socketio = require('socket.io'); 

var app = express(); 
var server = http.createServer(app); 
var io = socketio.listen(server); 

app.use(express.static(__dirname)); 

app.get('/', function (req, res) { 
    res.render(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.on('make', function (make) { 
    socket.on('model',function (model){ 
      console.log('recieved message:', make+','+model); 
     }); 
    }); 
}); 
server.listen(8000); 

回答

1

1)當你建立了一個靜態web服務器(見答案2),你可以簡單地下載jquery源代碼並從那裏提供.js文件。

2)「app.use(express.static ....」)配置靜態網絡服務器,並將http根目錄設置到您的node.js腳本所在的目錄中,如__dirname變量所示。詳見app.use API reference

至於結果,我會建議你改變你app.use到:。

app.use(express.static(__dirname + '/public')); 

,並把下一個public子目錄中所有的靜態文件,包括您的jQuery文件(S),

此外,您的服務器端代碼依賴於應該更改的makemodel的順序。例如,如果您將排序順序切換爲model,然後make,則應該看到您的服務器的console.log將從前一個調用中獲取產品。

相反,你可以試試:

// On server: 
socket.on('info', function (info) { 
    console.log('recieved message:', info.make+','+info.model); 
}); 

// On client: 
socket.emit('info', { make: makeInput, model: modelInput }) 
+0

謝謝marcoseu非常有幫助,我不知道如何在一個命令中「發射」幾個字符串。如果發出的數據是浮點數的數組,你會推薦什麼方法? – Kirbs 2013-05-11 13:15:20

+0

嘗試將數組包裝在字典中:'{nums:[1.2,1.3,1.4]}'。 – marcoseu 2013-05-11 14:15:32

0

1)你可以,如果你喜歡,更好地從你的服務器服務jQuery庫也。你應該把它放在你的項目中的public/vendor或public/js文件夾中。

2)這是一個來自Express框架的中間件調用,它依次使用Connect中間件堆棧。請閱讀here

+0

感謝您的答覆,我曾想過下載它和本地服務吧!乾杯。我已經閱讀了很多有關中間件的內容,但我不相信我明白這個術語的含義。它似乎主要與服務器「安靜地」完成的任務相關聯。除此之外還有更多嗎? – Kirbs 2013-05-11 13:43:43

相關問題