Express Ошибка: невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 29 января 2020

Я новичок в 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 голосов
/ 29 января 2020

Это потому, что вы уже отправили ответ с res.send('Logged In'). HTTP-запрос - это всегда один запрос и один ответ. Приведенный ниже фрагмент взят из вашего кода, чтобы показать, что происходит.

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

Методы send отправляют в качестве ответа строку, которую получит клиент. Таким образом, теперь заголовки для ответа уже установлены и не могут отправить другой ответ.

И отправка сообщения с последующим перенаправлением не имеет большого смысла. У вас не будет времени прочитать сообщение, потому что вы переходите на другую страницу. Потеряйте res.send и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...