Express无需重定向即可发送新的HTML页面

时间:2015-12-12 05:51:30

标签: javascript node.js express

我目前有一个带有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');
});

1 个答案:

答案 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事件的函数。 根据您使用的技术,您可以加载内容并以多种方式替换页面。