作爲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.js行if (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
});
});
});
因此, 「連接」 是特殊的,不喜歡的 「訪問」?你的意思是'io.on('connection')'或'socket.on('connection')'在我的情況下? –
@AlexanderFarber將對象分配給'io'的較新版本的Socket.IO文檔,但是它的名稱無關緊要。 'socket'似乎對你正在做的事情是正確的。 'connection'事件是從Socket.IO本身中觸發的。這不是一個遠程啓動的事件。 – Brad
我已更改爲'socket.on('連接')',但網頁保持模糊。你能否看看我更新的問題 - 我列出了完整的源代碼? –