mysql连接的模块导出

Posted

技术标签:

【中文标题】mysql连接的模块导出【英文标题】:module export for mysql connection 【发布时间】:2016-04-19 17:30:33 【问题描述】:

我一直在使用 Node.js,并且正在使用 node-mysql 编写一些测试应用程序。我正在尝试编写一个自动与数据库建立连接的模块,这样我就不必一次又一次地编写连接代码。这是我写的:

var mysql = require('mysql');

module.exports = function(mysql) 
  var client = mysql.createConnection(
    host: 'localhost',
    user: 'root',
    password: '12345'
  );
  return client;

但是当我尝试将此文件导入我的另一个 *.js 文件时,我收到一个错误:

~/work : $ node queryInfo.js
/Users/socomo22/work/queryInfo.js:3
client.connect();
       ^
TypeError: undefined is not a function
    at Object.<anonymous> (/Users/socomo22/work/queryInfo.js:3:8)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

由于我是 Node.js 的新手,我不确定自己做错了什么。请帮忙!

queryInfo.js // 需要上述模块的代码

var client = require('./connectMysql');

client.query("USE node");

client.query("INSERT INTO test(content) VALUES(?)", ['the content'],
  function(err, info) 
    if(err)
      return handle_error(err);
    console.log(info.insertId);
);


client.query('UPDATE test SET content = ?', ['new content'], function(err, info) 
  if(err)
    return handle_error(err);
  console.log(info.insertId);
);

client.end();

【问题讨论】:

你在哪一行得到这个错误? queryInfo.js 的第 3 行出现错误。 您是否尝试过示例中定义的简单方法github.com/felixge/node-mysql#introduction 是的,先生,这很好。但我很好奇它是否可以以这种方式工作。 【参考方案1】:

你可以用这个:

Config.js

var mysql      = require('mysql');
var config;
config = 
    mysql_pool : mysql.createPool(
        host     : 'hede',
        user     : 'hede',
        password : 'hede',
        database : 'hede'
    )
;
module.exports = config;

当你使用这个 js。你可以这样使用;

var mysqlConf = require('config.js').mysql_pool;

    mysqlConf.getConnection(function (err, connection) 
        connection.query('YOUR QUERY' ,[FIELDS], function (err, rows) 
            connection.release();   //---> don't forget the connection release.
        );
    );

【讨论】:

【参考方案2】:

connectMySQL.js

const mysql = require('mysql');

const con = mysql.createConnection(
    host: "YOUR_HOST",
    user: "YOUR_USER",
    password: "YOUR_PASSWORD",
    database: "YOUR_DATABASE_NAME"
);

con.connect(function(err) 
    if (err) throw err;
    console.log("Connected!");
);

module.exports = con

index.js

const con = require('./connectMySQL');

con.query("YOUR_QUERY", function (err, result, fields) 
    if (err) throw err;
    console.log(result);
);

con.end();

【讨论】:

【参考方案3】:

在 node.js 中打开数据库连接通常是异步的。我不知道那个模块,但是从连接到数据库中寻找连接的事件或回调。 然后让您的 MySQL 函数将回调函数作为参数。在这里你传递连接。

编辑:

如果连接尚未打开,MySQL 包通过临时排队查询来处理异步连接。但是,打开 MySQL 连接的推荐方法是:

var connection = mysql.createConnection(
  host     : 'example.org',
  user     : 'bob',
  password : 'secret'
);

connection.connect(function(err) 
  if (err) 
    console.error('error connecting: ' + err.stack);
    return;
  

  console.log('connected as id ' + connection.threadId);
);

一旦执行回调,连接就会真正打开。这是node的核心概念之一。

要使用它,请导入连接模块并具有如下界面:

var db = require("./connectMysql");
db.getConnection(function(err, connection) 
    // here u can run queries 
);

然后确保 MySQL createClient 只运行一次,并保存连接以供下次某些模块要使用它时使用。

【讨论】:

嗯,如果您能用一些代码解释一下,我将不胜感激。由于我是非阻塞式编程的新手,因此会有很大帮助。 在哪里关闭连接?【参考方案4】:

根据https://github.com/felixge/node-mysql你需要打电话

client.connect();

在 createConnection 之后和第一个查询之前。

【讨论】:

我在 createConnection 之后添加了这一行,现在我在这一行出现错误。未定义的函数。 是felixge/node-mysql 你用的是什么?从我的答案中的链接?

以上是关于mysql连接的模块导出的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7_初试连接Mysql查询数据导出到exce_20161216

如何用mysql workbench导出数据库表中的数据

mysql的复杂查询,连接数据库

flask连接mysql导出excel表格在客户端提供提供下载功能

navicat for MySQL怎么导出SQL脚本

mysql连接池模块