2015-12-12 2 views
0

В настоящее время у меня есть страница входа с node.js + express + socket.io. Есть ли способ отправить клиенту новую HTML-страницу без их перенаправления? (т. е. остаться на www.dns.com vs www.dns.con/home). Я попробовал res.sendFile, однако клиент не видит, чтобы принять новый HTML-файл.Express отправить новую HTML-страницу без переадресации

Текущий код

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/index.html'); //sets initial HTML page 
}); 

io.on('connection', function (socket) { 
    socket.on('login', function (username) { 
     if (username === 'user') 
     { 
      console.log("Login Sucessful"); 
      app.get('/', function (req, res) { 
       res.sendFile(__dirname + '/main.html'); //doesn't change HTML page 
      }); 
     } 
    }); 
}); 

http.listen(80, function() { 
    console.log('listening on port 80'); 
}); 
+0

Вы можете отправить им содержимое страницы через socket.io, а затем обновить страницу на стороне клиента. Я не уверен, почему вы хотите это сделать. – Harangue

ответ

1

Выполнив

app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/main.html'); //doesn't change HTML page 
}); 

внутри, что если вы просто добавить еще один маршрут для будущих запросов, которые не то, что вы хотите сделать. И не то, что нужно делать во многих других случаях.

Вы можете отправить содержимое файла HTML через сокет, а затем на стороне клиента, обработать его. Имейте функцию javascript, которая заменяет всю страницу заданным HTML-содержимым.

Или более эффективный способ, просто отправьте путь к файлу, а на стороне клиента загрузите файл с помощью ajax-вызова, а затем замените весь контент страницы на результат вызова ajax.

io.on('connection', function (socket) { 
    socket.on('login', function (username) { 
     if (username === 'user') 
     { 
      console.log("Login Sucessful"); 
      socket.send('replace-page', 'main.html'); // send the file name 
     } 
    }); 
}); 

На стороне клиента, есть функция, которая прослушивает для replace-page события. Основываясь на том, какую технологию вы используете, вы можете загружать контент и заменять страницу разными способами.

+0

Хорошо, я сделаю это. Благодарю. – champfish