node.js - 为什么mysql找不到数据时请求超时?
问题描述
信息
我有一expressjs
台服务器,它使用sequelize
一些令牌连接到我的数据库以保持连接。当客户端发送现有令牌时,请求获取令牌并让它进入下一个函数,但当客户端发送空或不正确的令牌时,它会阻塞几分钟并且不再响应。
服务器部分的请求
const Token = require('./models/token');
function isAuth(req, res, next) {
if (req.cookies.token) {
Token.findOne({where: {token: req.cookies.token}}).then(token => {
console.log("TOKEN");
if (!token) {
console.log("2");
res.clearCookie('token');
res.redirect("/");
} else
next();
})
} else {
console.log("1");
res.redirect("/");
}
};
当它由好令牌执行时,它会触发第一个console.log
但使用无效令牌时,它不会触发任何一个,而是保持阻塞。
模型令牌
var Sequelize = require('sequelize');
var sequelize = new Sequelize(process.env.DATABASE_URL);
var Token = sequelize.define('token', {
token: {
type: Sequelize.STRING,
unique: true,
allowNull: false
}
});
sequelize.sync().then(() => {
console.log('token table has been successfully created, if one doesn\'t exist');
}).catch(error => console.log('This error occured', error));
module.exports = Token;
我在谷歌上找不到另一个例子,我发现了一些东西,但它与我的问题没有联系,即使我测试它们仍然无法工作。
更新
当我修改令牌以删除一些字符时,它会保持很长时间的超时,但是当它为空时,请求没有问题。
我只向 db 发送 108 个字符代码作为令牌,而 db 只有 15 个条目。
当请求到达 2 分钟时,浏览器将其取消,并且在服务器上它不会显示任何错误。
服务器展示
Executing (default): SELECT `id`, `token`, `createdAt`, `updatedAt` FROM `tokens` AS `token` WHERE `token`.`token` = 'token_invalid';
GET /api/loadUserCurrent - - ms - -
解决方案
推荐阅读
- php - 搜索任何表字段中是否存在变量并获取表字段名称
- php - 使用数据库值的 Smarty 计算
- r - 使用 grepl() 从 R 中的数据框中删除值
- java - 如何处理 RequestMapping 中的@Valid 违规行为?
- python - 用于股票市场预测、回归的卷积神经网络
- excel - 从 Excel 电子表格中删除一些图片
- c# - Parent类方法如何订阅子类Event?
- love2d - windows上是否有love2d的分辨率处理库
- html - 从类选择传递数据以获取路线
- javascript - Google Maps API KMZ 文件在点击事件中显示错误数据