2015-04-17 68 views
1

作爲Node.js新手我試圖改變由Nick Anastasov的Smartphone Remote Control with Node.js and Socket.io示例,以便不需要密碼。連接建立後如何運行JavaScript代碼?

在原始源代碼的app.js文件小貓已進入一個網頁表單的字後發送{ access : 'granted' }的script.js開始它的主要任務,例如unblurs網頁:

socket.on('access', function(data) { 
    if (data.access === "granted") { // XXX Tried removing this line 

     blurredElements.removeClass('blurred'); 
     form.hide(); 

     $(window).on('hashchange', function() { 
      // .... 
     }); 

     socket.on('navigate', function(data) { 
      // .... 
     }); 
    } 
}); 

我已經改變了app.js,以便它不發射access可言。

然後我試圖消除剛從的script.jsif (data.access === "granted"),但是這當然沒有奏效:網頁撐模糊,因爲沒有收到access事件了(既不granted,也不denied)。

我的問題是:我應該怎麼請更換上面的代碼,使得它一旦建立連接運行?

我是否應該使用socket.on('connect')socket.on('connection')或者它是同樣的問題(因爲沒有字符串connect被髮送)?

UPDATE:

正如布拉德建議(謝謝!)我在的script.js從「准入」向「連接」改變了字符串,但網頁撐模糊 - 這裏是完整的源代碼:

$(function() { 
    Reveal.initialize({ 
     history: true 
    }); 

    var socket = io(); 
    var presentation = $('.reveal'); 

    socket.on('connection', function(data){ // XXX changed this 

       presentation.removeClass('blurred'); // XXX not called 
       var ignore = false; 

       $(window).on('hashchange', function(){ 
         if (ignore){ 
           return; 
         } 
         var hash = window.location.hash; 
         socket.emit('slide-changed', { 
           hash: hash 
         }); 
       }); 

       socket.on('navigate', function(data){ 
         window.location.hash = data.hash; 
         ignore = true; 
         setInterval(function() { 
           ignore = false; 
         },100); 
       }); 
    }); 
}); 

這裏是完整的app.js源代碼:

var express = require('express'), 
    app = express(); 

var port = process.env.PORT || 8080; 
var io = require('socket.io').listen(app.listen(port)); 
app.use(express.static(__dirname + '/public')); 

var presentation = io.on('connection', function (socket) { 
    socket.on('slide-changed', function(data){ 
       presentation.emit('navigate', { 
         hash: data.hash 
       }); 
    }); 
}); 

回答

1

是的,你想要io.on('connection')。每當新客戶端連接時,都會觸發此事件。

http://socket.io/docs/

+0

因此, 「連接」 是特殊的,不喜歡的 「訪問」?你的意思是'io.on('connection')'或'socket.on('connection')'在我的情況下? –

+1

@AlexanderFarber將對象分配給'io'的較新版本的Socket.IO文檔,但是它的名稱無關緊要。 'socket'似乎對你正在做的事情是正確的。 'connection'事件是從Socket.IO本身中觸發的。這不是一個遠程啓動的事件。 – Brad

+0

我已更改爲'socket.on('連接')',但網頁保持模糊。你能否看看我更新的問題 - 我列出了完整的源代碼? –