Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js,快速路由到socket.io中的新页面_Node.js_Express_Socket.io - Fatal编程技术网

node.js,快速路由到socket.io中的新页面

node.js,快速路由到socket.io中的新页面,node.js,express,socket.io,Node.js,Express,Socket.io,我在页面上有一个按钮,单击该按钮时,我希望该页面调用一些node.js服务器代码。我已通过socket.io将其连接起来。我遇到的问题是,我需要socket.io代码根据某些业务逻辑重定向我的网页。不确定通过express(res.redirect?)执行此操作的最佳方式是什么,也不确定如何在socket.io调用中访问它。任何帮助都将不胜感激 App.js var dashboard = require('./middleware/dashboard.js'); ... app.get("/d

我在页面上有一个按钮,单击该按钮时,我希望该页面调用一些node.js服务器代码。我已通过socket.io将其连接起来。我遇到的问题是,我需要socket.io代码根据某些业务逻辑重定向我的网页。不确定通过express(res.redirect?)执行此操作的最佳方式是什么,也不确定如何在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
                    }
             });
        });
    });
}

我认为从客户端来说更容易做到,即javascript:

  • 服务器端逻辑完成后,您将向客户端发送一条消息,并将
    窗口位置更改为新窗口
  • 服务器完成后,客户端可以向服务器发出请求,服务器将使用HTTP 301/302重定向进行响应。通过这种方式,您可以在快速请求时调用res.Redirect

  • 关于,

    在客户端web呈现新页面时安全吗?@KammerLee我不知道为什么不安全,也许您想详细说明您的担忧?
    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);
      });