我目前有一个带有node.js + express + socket.io的登录页面。有没有办法在不重定向的情况下向客户端发送新的HTML页面? (即留在www.dns.com vs www.dns.con / home)。我尝试了res.sendFile但是客户端看不到接受新的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 :(得分: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
事件的函数。
根据您使用的技术,您可以加载内容并以多种方式替换页面。