表达错误:将标头发送到客户端后,无法设置标头

时间:2020-01-29 11:46:06

标签: javascript node.js express http http-headers

我是node.js的新手... 我会为学校项目创建一个聊天应用程序,但是节点模块“ express”存在一些问题。 错误在于res.redirect('/');

    var app = express();
    var sess;

    app.use(session({
        secret: 'secret',
        resave: true,
        saveUninitialized: true
    }));

    app.get('/auth', function (req, res) {
        var type = req.query.type;
        sess = req.session;

        if (type === "login") {
            if (sess.loggedin) {
                return res.redirect('/');
            } else {
                res.sendFile(__dirname + "/views/login.html");
            }
        }
    });

    app.post('/auth', function (req, res) {
        var type = req.query.type;
        sess = req.session;

        if (type === "login") {
            var login = req.body.login;
            var password = req.body.password;
            if (login === "" || password === "") {
                res.send('You need to fill all inputs!');
                res.end();
            } else {
                mysql query {
                    if (results.length > 0) {
                        res.send('Logged In');
                        sess.loggedin = true;
                        sess.username = results[0].username;
/* ERROR! --> return res.redirect('/'); <-- ERROR! */
                    } else {
                        res.send('Incorrect Username and/or Password!');
                        res.end();
                    }
                    res.end();
                });
            }
        }
    });

我观看了youtube视频并阅读了论坛,但没有找到解决方案... 如果您能帮助我,那就太好了:)

1 个答案:

答案 0 :(得分:0)

这是因为您已经用res.send('Logged In')发送了回复。 HTTP请求始终是单个请求和单个响应。下面的代码段摘自您的代码以显示发生的情况。

res.send('Logged In'); // <-- Sends a response
res.redirect('/'); // <-- Sends another response in form of redirect.

send方法发送一个字符串作为响应,客户端将接收该字符串。因此,现在响应头已经设置好,无法发送其他响应。

先发送一条消息然后重定向,这没有多大意义。您将没有时间阅读消息,因为您导航到其他页面。丢掉res.send,看看会发生什么。