我有MySQL,Express,Angular,NodeJS应用程序,有时当我登录时,我在节点控制台中收到以下错误:
TypeError: Cannot read property ‘query’ of undefined
我的passport.local.js文件中出现错误,这是行:
connection.query('SELECT * FROM users WHERE username LIKE ?', [username], function (err, user) {
这是护照功能
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('app.js');
pool.getConnection(function(err, connection) {
console.log('err: ' + err);
console.log(connection);
connection.query('SELECT * FROM users WHERE username LIKE ?', [username], function (err, user) {
if (err) throw err;
for (var i = user.length - 1; i >= 0; i--) {
var current = user[i];
}
if(current){
if(bcrypt.compareSync(password, current.password)){
return done(null, user);
} else {
return done(null, false);
}
} else {
console.log('no user');
return done(null, false);
}
});
connection.release();
});
}
));
我需要我的文件顶部的池
var pool = require('../../config/connection');
发生错误时:
console.log(connection);
获取:
undefined
我还记录错误:
console.log('err: ' + err);
显示:
err: Error: ER_USER_LIMIT_REACHED: User 'bfe4a8980ede74' has exceeded the 'max_user_connections' resource (current value: 10)
解决方法:
您得到的错误是说明问题:您的MySQL服务器仅允许每个用户10个连接,并且已达到该限制.
default for the mysql
connection pool也恰好是10,这真的很接近.如果Express应用程序以外的任何其他MySQL客户端使用相同的用户凭据连接到数据库,则可能会遇到该特定错误.我建议增加MySQL配置中的max_user_connections.
除此之外,您的代码还有另一个问题:它在查询完成之前释放连接,这可能会导致意外行为.将对connection.release()的调用移到回调内部:
pool.getConnection(function(err, connection) {
...
connection.query('SELECT * FROM users WHERE username LIKE ?', [username], function (err, user) {
connection.release();
...
});
});
如果这是您使用MySQL的常用方式(获取连接,执行查询,释放连接),则可以通过使用pool.query()来简化生活.见this example.
最后,如果您正在使用异步代码,请不要抛出错误,而是将它们传递给回调(并确保您实际处理它们,因为除了记录它们之外,您现在还没有处理来自pool.getConnection的任何错误):
pool.getConnection(function(err, connection) {
if (err) return done(err);
...
});
原文地址:https://codeday.me/bug/20190824/1703370.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。