express. js получить имя пользователя из mysql база данных не перенаправляет на страницу входа - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь получить имя пользователя из базы данных mysql, приведенный ниже код может успешно получить имя пользователя. Однако, когда возникает ошибка, код не перенаправляется в / signin. Вместо этого страница перенаправляется на / admin. Хотя, если я добавлю

res.redirect ('/ signin')

непосредственно перед последней фигурной скобкой, он будет перенаправлен на страницу входа, но он выиграл не могу получить имя пользователя.

Я хочу, чтобы оно перенаправлялось на страницу входа, как?

const connection = require('./connection')

const signin = (req, res) => {

    var email = req.body.email
    var password = req.body.password
    let queryStr = `select username from users where email='${email}' and password='${password}'`

    return connection.query(queryStr, (err, rows, fields) => {
        if (err) {
            res.redirect('/signin')
                     
        } else {
            req.session.email = email
            res.json(rows[0])
        }
    })
    
}

module.exports = signin

Я думаю, что это связано с asyn c, потому что код выполняет последнюю строку, а затем go возвращается к оператору else. Я думаю, именно поэтому он идет на страницу / admin. но еще не исправлено.


соединение. js

const mysql=require('mysql')

var connection=mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'root',
    database:'essencejoin',
})

connection.connect()

connection.query('SELECT 1 + 1 AS solution', function (err, rows, fields) {
    if (err) throw err
  
    console.log('The solution is: ', rows[0].solution)
  })

module.exports=connection

Ответы [ 3 ]

0 голосов
/ 14 января 2020

На самом деле, вы правильный запрос, но запрос не возвращает никаких строк. Так что, если пользователь не найден в таблице имен пользователей. Необходимо войти на страницу (Это ваш вопрос правильный?), Для этого вам нужно обновить код, как показано ниже,

const connection = require('./connection')

const signin = (req, res) => {

    var email = req.body.email;
    var password = req.body.password;
    let queryStr = `select username from users where email='${email}' and password='${password}'`;

    return connection.query(queryStr, (err, rows, fields) => {
        if (err) {
            res.redirect('/signin');           
        } else if(!rows.length) {
            res.redirect('/signin');
        }else {
            req.session.email = email;
            res.json(rows[0]);
        }
    })

}

module.exports = signin
0 голосов
/ 14 января 2020

Похоже, ваш код выполняется после того, как вы его вернули. Вы можете использовать обещанную версию того же кода.

использование mysql -обещание . это обещанная обертка вокруг той же библиотеки, которую вы используете. тогда ваш код будет выглядеть примерно так:

// установить mysql -обещать

npm i mysql-promise

соединение. js

const mysql = require("mysql-promise");

async function getDBConn() {
  const connection =  mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    database: "essencejoin"
  });
  await connection.connect();
  return connection;
}

module.exports = getDBConn;

затем использовать его как this:

// signin. js

const signin = (req, res) => {
  const email = req.body.email;
  const password = req.body.password;
  const connection = getDBConn();
  let queryStr = `select username from users where email='${email}' and password='${password}'`;
  try {
    await connection.query(queryStr);
    req.session.email = email;
    res.json(rows[0]);
  } catch (error) {
    console.log(error);
    res.redirect("/signin");
  }
};

module.exports = signin;

Disclaimer: я не проверял это, даже если это не работает, это должно дать вам четкое представление о том, как заставить это работать

0 голосов
/ 14 января 2020

Не зная слишком много о вашем проекте, я думаю, что вы захотите добавить код состояния с перенаправлением express.

 index(req, res, next) {
    topicQueries.getAllTopics((err, topics) => {
      if (err) {
        res.redirect(500, "static/index");
      } else {
        res.render("topics/index", { topics });
      }
    });
  }

Что-то в этом роде. Также обратите внимание на другие простые ошибки в вашем проекте, которые могут вызвать это, которые имеют дело с Express.

https://expressjs.com/en/api.html#res .redirect

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