2013-01-04 11 views
-1

클릭하면 페이지가 node.js 서버 코드를 호출하도록합니다. 나는 이것을 socket.io를 통해 유선화했다. 내가 겪고있는 문제는 비즈니스 로직을 기반으로 내 웹 페이지를 리디렉션하기 위해 socket.io 코드가 필요하다는 것입니다. 익스프레스 (res.redirect?)를 통해이를 수행하는 가장 좋은 방법은 무엇인지, socket.io 호출 내에서 액세스를 얻는 방법도 확실하지 않습니다. 어떤 도움을 주시면 감사하겠습니다!node.js socket.io 내의 새 페이지로의 특급 라우팅

App.js

var dashboard = require('./middleware/dashboard.js'); 
... 
app.get("/dashboard", function (req, res) { 
    dashboard.show(req, res); 
}); 
... 
var http = require('http'); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 

io.set('log level',2); // sets socket io log level 0=error, 1=warn, 2=info, 3=debug 
... 
dashboard.wireUpSocketIO(io); 
... 

dashboard.js

var savedResponse; 

exports.show = function(req, res) { 
    savedResponse = res; 
    res.render("dashboard.jade"}); 
}; 


exports.wireUpSocketIO = function(io){ 
    io.sockets.on('connection', function (socket) { 
     socket.on('dashboardOnButtonClick', function(msg) { 

      <biz logic> 

      savedResponse.render("someOtherPage.jade", { 
        locals: { 
         title: "someOtherPage", 
         filter: msg.filter 
        } 
      }); 
     }); 
    }); 
} 

dashboard.jade

button#btnFilter(class='btn btn-info') Test Button 

script(src="/socket.io/socket.io.js") 
script . 
    var socket = io.connect('http://localhost'); 
    var emitMessage = { blah: false, filter:"n/a"}; 

    $('#btnFilter').click(function(){ 
     emitMessage.blah = true; 
     emitMessage.filter = "filterByBlah"; 
     socket.emit('dashboardOnButtonClick', emitMessage); 
    }); 

답변

2

내가 즉, 클라이언트 측에서 할 쉽게 생각할 수있는, javascript :

  1. 서버 측 논리가 완료되면 클라이언트에 메시지를 보내고 window.location을 새 것으로 변경합니다.
  2. 일단 서버가 완료되면 클라이언트는 서버가 HTTP 301/302 리디렉션으로 응답한다는 요청을 발행 할 수 있습니다. 이렇게하면 Express 요청에서 res.Redirect를 호출 할 수 있습니다.

감사합니다,

+0

인가하는 웹 클라이언트 측에 새로운 페이지를 렌더링 할 때 안전? – Kramer

+0

@KammerLee 왜 그렇게해서는 안되며, 우려 사항에 대해 자세히 설명하고 싶습니까? – Hugo