-1

ページにボタンがあり、クリックすると、ページで node.js サーバーコードを呼び出す必要があります。これをsocket.io経由で配線しました。私が直面している問題は、ビジネス ロジックに基づいて Web ページをリダイレクトするための socket.io コードが必要なことです。エクスプレス(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);
...

ダッシュボード.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
                    }
             });
        });
    });
}

ダッシュボード.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);
  });
4

1 に答える 1

2

クライアント側、つまりjavascriptから行う方が簡単だと思います:

  1. サーバー側のロジックが完了したら、メッセージをクライアントに送り返しwindow.location、新しいものに変更します。
  2. サーバーが完了すると、クライアントは、サーバーが HTTP 301/302 リダイレクトで応答するように要求を発行できます。このようにして、その Express リクエストで res.Redirect を呼び出すことができます。

よろしく、

于 2013-01-04T23:47:55.240 に答える