javascript - 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
解决方案
看起来您的代码在您返回后正在执行。您可以使用相同代码的承诺版本。
使用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;
免责声明:我没有测试过这个,即使这不起作用,这应该让你知道如何让它工作
推荐阅读
- winforms - VS 中的 C++ saveFileDialog。如何使用 saveFIledialog 保存到现有文件?
- javascript - 登录控制台时值正确,但在变量中使用时未定义
- flutter - 在颤动中使用来自不同小部件的命名导航器?
- image-processing - 在 Octave 的图像包中是否有另一种方法来计算 regionprops.Solidity 中的 Solidity?
- javascript - 为什么手动调整 Visjs 时间线图的高度(可调整大小)不起作用?
- c# - 从 Blazor WebAssembly 客户端项目中的 GetFromJsonAsync 调用接收 Blazor 服务器项目中 API 方法中的参数
- android - 无法使用应用程序上下文翻译字符串
- azure-active-directory - 本地 Web API 2 授权不使用 Azure 身份令牌
- java - 是否可以为 android 中长数据类型元素的 Edittext 设置文本
- c# - Asp.Net Core - 读取文件