连接build立后如何运行JavaScript代码?
作为一个Node.js新手我试图改变与 Nick Anastasov的Node.js和Socket.io示例的智能手机远程控制,以便不需要密码。
在原始源代码中, app.js文件在input一个web表单并且script.js开始它的主要任务之后发送{ access : 'granted' }
,例如取消网页:
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")
,但这当然没有奏效:网页保持模糊,因为没有接收到事件了(不granted
也不denied
)。
我的问题是:我应该如何改变上面的代码,以便连接build立后运行?
我应该使用socket.on('connect')
或socket.on('connection')
或是同样的问题(因为没有stringconnect
正在发送)?
更新:
正如Brad所build议的(谢谢!)我已经将script.js中的string从“access”改为“connection”,但是网页保持模糊 – 这里是完整的源代码:
$(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')
。 每当新客户端连接时,都会触发此事件。