NodeJS mysql连接.查询回调不记录结果到控制台?



尝试使用mySQL npm包连接到数据库并打印查询结果。为什么con.connect()和con.query()中的console.log()语句不打印'connected!或将查询结果发送到控制台?

console.log("we here now")被执行,程序没有退出。如果我提供了错误的密码/主机,con.connect()中的错误会被抛出,但是当连接建立时,"已连接"!不是印刷。我错过了什么?

var mysql = require('mysql');
var con = mysql.createConnection({
host: 'host',
port: 'port',
user: 'user',
password: 'pass'
});

con.connect(function(err) {
if (err) throw err;
console.log("connected!");
con.query("SELECT 1 as solution", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
console.log("we here now");
con.end();

1-您是否正确更改了这4个变量

主持人:"主人",端口:"端口",用户:"用户",密码:"通过">

2-确保你的mysql数据库服务器正在运行

3-验证你的SQL SELECT查询,1是什么,从哪个表?并确保DB不是空的。

有几件事。

首先,稍微重构一下。将connection.query移动到与connect调用相同的作用域。

确保你设置了连接配置:

const mysql      = require('mysql');
const connection = mysql.createConnection({
host     : 'BE_SURE_TO_SET_ME',
user     : 'BE_SURE_TO_SET_ME',
password : 'BE_SURE_TO_SET_ME',
database : 'BE_SURE_TO_SET_ME'
});
connection.connect(function(error){
if (error) {
console.error('❌ Query failed: ', error);
throw error;
}
console.log('✅ Connection successful');
});
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) {
console.error('❌ Query failed: ', error);
throw error;
}
console.log('✅ Query successful. Results: ', {results});
});
connection.end();

其次,JS本质上是异步的,所以console.log("we here now");触发的原因是因为它和connect在同一个作用域中。JS引擎不会等到connect回调被调用,它只是移动到下一个语句。因此存在一个竞争条件——在connect函数回调抛出错误之前,它可能(也可能不)在进程tick上执行。

因此,我在它们发生的回调中添加了console.logconsole.error语句。这会给你更好的反馈。(ps.最好使用像winston这样的记录器)

在server.js文件

中使用以下代码
var mysql = require('mysql');
const util = require('util');
const mysqlconnection = mysql.createConnection({
host: '10.0.1.117', //Change this IP
user: 'john',
password: 'password',
database: 'customers_db',
port: 3306,
multipleStatements: true,
});


const db1 = mysqlconnection;
const query = util.promisify(db1.query).bind(db1);

async function connectMySql(callback) {
mysqlconnection.connect(async function (err, client) {
if (err) {
console.error('error connecting: ' + err);
return;
}
let myquery1 = "SELECT * FROM users";
var newRecords = [];
newRecords = await query(myquery1)
.catch(err => {
console.log(err)
});
console.log(newRecords)
});
};
connectMySql();

输出为

> [ RowDataPacket {
>     UserId: 101212,
>     LoginName: 'user1233',
>     RoleName: user',
>     C7: '2021-07-28 11:29:28' } ]

最新更新