2013-05-11 113 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

相关问题