首页 > 解决方案 > mysql.connect 永远不会返回

问题描述

const mysql = require('mysql');

const dbCon = mysql.createConnection({
    host: "localhost",
    user: "mainUser",
    password: "pa55",
    database: "testDB"
});

dbCon.connect(function (err) {
    if (err) throw err;
    console.log("Connected to DB");
});

当我运行它时,我看到“已连接到数据库”日志,但程序永远不会完成或退出,就像它在等待什么一样。

标签: mysqlnode.js

解决方案


让我们尝试获取下面的代码并将其保存到“dbConnect.js”文件中,然后运行 ​​node-command: > node dbConnect.js 您将看到结果。

const mysql = require('mysql');

const dbCon = mysql.createConnection({
    host: "localhost",
    user: "mainUser",
    password: "pa55",
    database: "testDB"
});

dbCon.connect(function(err) {
    if (err) {
        return console.log(err.message);
    }
    console.log('Connected to the MySQL server.');
});

let dbCreateQuery = `
                        create table if not exists users(
                            id int primary key auto_increment,
                            first_name varchar(255)not null,
                            last_name varchar(255)not null);
                    `;

let dbInsertQuery = `   
                        insert into users (first_name, last_name) 
                        values ('john', 'smith');

                        insert into users (first_name, last_name) 
                        values ('jane', 'smith');
                    `;

let dbSelectQuery = `
                        select * 
                        from users
                    `;

//test of create query execute
dbCon.query(
    dbCreateQuery, 
    function(err, results, fields) {
        if (err) {
            console.log(err.message); //execution error
        }
        else {
            console.log('Table "users" has been created';
        }
    });

//test of insert query execute          
dbCon.query(
    dbInsertQuery,
    function(err, results, fields) {
        if (err) {
            console.log(err.message); //execution error
        }
        else {
            console.log('Table "users" has been filled';
        }
});

//test of select query execute
dbCon.query(
    dbSelectQuery,
    function(err, results, fields) {
        if (err) {
            console.log(err.message);
        }
        else {
            console.log('Data rows from table "users" has been extracted';
            console.log(results);   // data rows
            console.log(fields);    // meta of fields
        }
});

/*
Also, recommended use 'end()' method for closing connection to database after running operations.
*/
dbCon.end(function(err) {
    if (err) {
        return console.log(err.message);
    }
    console.log('Close the MySQL server connection.');
});

/*
Then use 'destroy()' method for close connection immediately, it's
guarantees that no more callbacks or events will be triggered for the connection, 
i.e. method does not take any callback argument like the end() method.
*/
dbCon.destroy();

推荐阅读