@frank_sider
Системный программист

Почему виснет сайт на Node.Js после res.redirect(url)?

Здравствуйте! Пытаюсь сделать систему авторизации для сайта. Задание из университета: использовать Passport.js и подобные вещи нельзя, можно только хранилище сессий. В качестве хранилища сессий использую connect-pg. После нажатия на кнопку Login на сайте браузер отправляет POST запрос на сервер с логином и паролем. При получении этого запроса сервер лезет в базу данных и ищет пользователя в ней. Если такой пользователь найден, то сервер редеректит на корень сайта. В корне сайте рендерится index. Так вот после редеректа сайт виснет, в браузере отображается надпись "Ожидание ответа от localhost". В чем может быть ошибка?

router.post('/login.:format?', function (req, res) {
  var login = req.body;

  if (req.params.format === 'json'){
    res.send(login);
  }
  else {
    userUtils.login(login, function (user){
      if (user) {
        req.session.user_id = user.id;
        res.redirect('/');
      } else {
        res.redirect('/users/login');
      }
    },
    function (error) {
      express.error(error);
    });
  }
});

var user_utils = {
    pgConnect: function (callback) {
        pg.connect(connection, function(err, client){
            if (err) {
                console.log('connection to PG error ', err);
            }

            if (client) {
                callback(client);
            }
        });
    },

    loadUser: function(req, res, next) {
        if (req.session.user_id) {
            connectToDatabase(function (database) {
                database.one('select * from users where id=${id}', {id: req.session.user_id})
                    .then(function (user) {
                        if (user) {
                            req.currentUser = user;
                            next();
                        }
                        else {
                            res.redirect('/users/login');
                        }
                    }).catch(function (e) {
                        res.redirect('/users/login')
                    })
            })
        } else {
            res.redirect('/users/login');
        }
    },
    
    login: function (user, loginCallback, errorCallback) {
        connectToDatabase(function (database) {
            database.one('select * from users where login=${login}', {login: user.login})
                .then(function (u) {
                    console.log('login');
                    if (user.password === u.password){
                        console.log('user ' + u.id + ' logged');
                        loginCallback(u);
                    }
                })
                .catch(function (error) {
                    errorCallback(error)
                })
        })
    },

    register: function (user, registerCallback, errorCallback) {
        connectToDatabase(function (database) {
            database.one('insert into employers (id, first_name, middle_name, last_name) values (${id}, ${firstName}, ${middleName}, ${lastName}) returning id',
            {
                    id: user.sequenceNumber,
                    firstName: user.firstName,
                    middleName: user.middleName,
                    lastName: user.lastName
            })
                .then(function (employer) {
                    database.none('insert into users (login, password, employer_id) values(${login}, ${password}, ${id})',
                        {
                            login: user.login,
                            password: user.password,
                            id: employer.id
                        })
                        .then(function () {
                            registerCallback();
                        })
                        .catch(function (error) {
                            errorCallback(error)
                        })
                })
                .catch(function (error) {
                    errorCallback(error)
                })
        })
    }
};


block content
    form(name='login' action='/users/login' method='post')
        label
            h1 Login
        input(type='text' name='login')
        br
        br
        label
            h1 Password
        input(type='text' name='password')
        br
        br
        br
        input(type='submit' value='Login')
        a(href='/users/register') Register
  • Вопрос задан
  • 625 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы