2013-05-11 2 views
0

Я создал базовую серверную программу node.js и использовал socket.io для передачи некоторых данных поля от клиента (см. Ниже). Довольно странно, как я новичок в этом бизнесе. Мне понравился этот метод node-express-socket.io как его весь Javascript и, по-видимому, он используется большинством браузеров (включая «мобильный»). Проблема в том, что я немного пошарил и не совсем понял, что я создал! Два вопроса ...Node.js - socket.io web app

1) Нужно ли использовать «//ajax.googleapis.com ... jquery ...»? Это раздражает, так как браузеру необходимо будет подключиться к Интернету. Есть ли другой способ доступа к элементам html doc без необходимости подключения к Интернету?

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) Как вы установили статический веб-сервер (см. Ответ 2), вы можете просто загрузить источник jquery и оттуда подавать файл .js.

2) «app.use (express.static ....» настраивает статический веб-сервер и настраивает http-корневую директорию в каталог, в котором живет ваш скрипт node.js, как указано переменной __dirname. подробно см app.use API reference

в результате, я бы порекомендовал вам изменить вас app.use к:..

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

и поместить все ваши статические файлы, включая файл (ы) Jquery, в подкаталоге public

Кроме того, ваш код на стороне сервера имеет зависимость от последовательности make и model, которые следует изменить. Например, если вы измените порядок испускания на 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

+0

Попробуйте обернуть массив в словаре: '{nums: [1.2, 1.3, 1.4]}'. – marcoseu

0

1) Вы можете служить библиотеку JQuery также с вашего сервера, если вы хотите, что лучше. Вы должны поместить его в папку public/vendor или public/js в своем проекте.

2) Это вызов промежуточного программного обеспечения от Express framework, который в свою очередь использует стек промежуточного программного обеспечения Connect. Читайте об этом here.

+0

Спасибо за ответ, я должен подумать о том, загрузив его и служить его локально! веселит. Я немного прочитал о промежуточном программном обеспечении, но не уверен, что понимаю, что означает этот термин. По-видимому, это в основном связано с задачами, которые «тихо» выполняется сервером. Есть ли еще больше, чем это? – Kirbs