首页 > 解决方案 > express.js 从 mysql 数据库中检索用户名不会重定向到登录页面

问题描述

我正在尝试从 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

我认为它与异步有关,因为代码执行最后一行然后返回 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

标签: javascriptmysqlnode.jsexpress

解决方案


看起来您的代码在您返回后正在执行。您可以使用相同代码的承诺版本。

使用mysql-promise。这是您正在使用的同一个库的承诺包装器。那么您的代码将如下所示:

// 安装 mysql-promise

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;

然后像这样使用它:

//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;

免责声明:我没有测试过这个,即使这不起作用,这应该让你知道如何让它工作


推荐阅读