GVKun编程网logo

如何在 Node js 中保证 mysql 池连接?(nodejs连接mysql的历程)

15

想了解如何在Nodejs中保证mysql池连接?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于nodejs连接mysql的历程的相关问题,此外,我们还将为您介绍关于docker-compo

想了解如何在 Node js 中保证 mysql 池连接?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于nodejs连接mysql的历程的相关问题,此外,我们还将为您介绍关于docker-compose:nodejs mysql无法连接mysql、MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库、node 连接MySQL及其分装, 连接池连接、node+mysql数据库连接池连接的方法是什么的新知识。

本文目录一览:

如何在 Node js 中保证 mysql 池连接?(nodejs连接mysql的历程)

如何在 Node js 中保证 mysql 池连接?(nodejs连接mysql的历程)

这是一个关于我如何解决它的简单示例:

pool.getConnection = util.promisify(pool.getConnection)
let conn = await pool.getConnection();
conn.query = util.promisify(conn.query)

sql = "INSERT INTO test (name) VALUES ( ? ) ; ";
param = [''fakename''];
results = [];
results = await conn.query(sql,param)

conn.release(); // is important remember to release the connection

docker-compose:nodejs mysql无法连接mysql

docker-compose:nodejs mysql无法连接mysql

我尝试对自己的节点应用程序进行dockerl化,但无法连接mysql容器.我的代码:

docker-compose.yml

  version: '3.2'
  services:
    node:
      build: ./
      ports:
        - "8787:8787"
      depends_on:
        - db
      networks:
        - docker_xxx
      environment:
        - PORT=8787
        - DATABASE_HOST=db
        - DATABASE_PASSWORD=xxx
        - EGG_SERVER_ENV=local
        - NODE_ENV=development
      # command: ["./wait-for-it.sh", "db:3306", "--", "npm run docker"]
    db:
      build: ./db
      networks:
        - docker_xxx
      environment:
        - MysqL_ROOT_PASSWORD=xxx
        - MysqL_DATABASE=database
        - MysqL_USER=user
        - MysqL_PASSWORD=passwd

  networks:
    docker_xxx:
      driver: bridge

./Dockerfile(用于nodejs)

  FROM node:8.9.4-alpine

  RUN mkdir -p /usr/src/app

  workdir /usr/src/app

  copY package.json /usr/src/app/

  RUN npm install --production

  copY . /usr/src/app
  # copY wait-for-it.sh /usr/src/app

  EXPOSE 8787

  CMD npm run docker

db / Dockerfile(对于MysqL)

  FROM MysqL:5.6

  ADD honggang.sql /docker-entrypoint-initdb.d

config / config.default.js

 config.MysqL = {
    // MysqL settings
    client: {
      // host
      host: process.env.DATABASE_HOST || '127.0.0.1',
      // port
      port: '3306',
      // username
      user: 'root',
      // password
      password: 'xxx',
      database: 'xxx',
      charset: 'utf8',
      dialectOptions: {
        collate: 'utf8_general_ci',
      },
    },
    app: true,
    agent: false,
  };

我运行docker-compose up -d,只有数据库正在运行.

我运行docker logs hash来查找错误,它显示以下信息:

        2018-04-30 14:43:51,334 ERROR 54 nodejs.ECONNREFUSEDError: connect ECONNREFUSED 172.19.0.2:3306
            at Object._errnoException (util.js:1022:11)
            at _exceptionWithHostPort (util.js:1044:20)
            at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)
            --------------------
            at Protocol._enqueue (/usr/src/app/node_modules/MysqL/lib/protocol/Protocol.js:145:48)
            at Protocol.handshake (/usr/src/app/node_modules/MysqL/lib/protocol/Protocol.js:52:23)
            at PoolConnection.connect (/usr/src/app/node_modules/MysqL/lib/Connection.js:130:18)
            at Pool.getConnection (/usr/src/app/node_modules/MysqL/lib/Pool.js:48:16)
            at /usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:29:7
            at new Promise (<anonymous>)
            at Pool.<anonymous> (/usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:12:10)
            at Pool.ret [as getConnection] (/usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:56:34)
            at Pool.query (/usr/src/app/node_modules/MysqL/lib/Pool.js:202:8)
            at /usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:29:7
            sql: select Now() as currentTime;
        code: 'ECONNREFUSED'
        errno: 'ECONNREFUSED'
        syscall: 'connect'
        address: '172.19.0.2'
        port: 3306
        fatal: true
        name: 'ECONNREFUSEDError'
        pid: 54
        hostname: d9cd95667a5d

我添加了CMD ping db,它响应了.

我尝试使用wait-for-it.sh(代码刚刚被注释掉),但是得到了错误信息:

env: can't execute 'bash': No such file or directory

解决方法:

我解决了https://github.com/ycjcl868/eggjs-mysql-docker

有几点:
1. apk添加–no-cache bash运行wait-for-it.sh,等待MysqL服务器正常
2.主机名是0.0.0.0而不是localhost / 127.0.0.1

MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库

MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库

导言: 由于本人初次尝试,真的一言难尽啊!遇到很多问题, 问题我会列出来,如果你有好的方法实现欢迎留言!

问题:

1·nodeJS与MysqL版本8.0+冲突问题?

查资料得出结论有以下几种:

a,MysqL降版本 nodeJs 支持 5.7+版本

b,由于MysqL卸载太麻烦了 我选择的这种是把MysqL密码改简单一点,或许这就是加密简单的原因吧!最后结果是正常连接到数据库!

以下是MysqL改密码指令:

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH MysqL_native_password BY ‘修改后的密码’

刷新权限:

FLUSH PRIVILEGES

tips:我的密码改成超简单的123,毕竟用来测试嘛

现在步入正题 nodeJs写的接口连接MysqL数据:

步骤一:确定安装了node;

检测安装指令:

node -v

若没有安装:nodeJS传送门

 安装完成后开始node项目。

步骤二:分以下几个小步骤

a,选个目录,起个名 比如 serverNode

b,cd到这个目录,输入指令

npm init
npm install body-parser express MysqL cors -S

c,根目录有个app.js文件,若没有自己创建一个app.js

var http = require(''http'');
var createError = require(''http-errors'');
var express = require(''express'');
var path = require(''path'');
var cookieParser = require(''cookie-parser'');
var logger = require(''morgan'');


var indexRouter = require(''./routes/index'');
var usersRouter = require(''./routes/users'');

/**
 * 连接 MysqL 数据库
 * */ 
var MysqL = require(''MysqL'');
var connection = MysqL.createConnection({
  host:''127.0.0.1'',
  user: ''root'',
  password: ''123'',
  database: ''userslist'',
  port: ''3306''
});
connection.connect((err) => {
  if(err) throw err;
  console.log(`连接成功`)
});

var app = express();

// 跨域
// 跨域
const cors = require( ''cors'');
app.use(cors());

// view engine setup
app.set(''views'', path.join(__dirname, ''views''));
app.set(''view engine'', ''jade'');

app.use(logger(''dev''));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, ''public'')));

app.use(''/'', indexRouter);
app.use(''/users'', usersRouter);

// catch 404 and forward to error handler
// app.use(function(req, res, next) {
//   next(createError(404));
// });


// 跨域  同一站点:协议,域名,端口都一样的叫做同一个站点
//设置跨域访问  res.header("Access-Control-Allow-Headers", "X-Requested-With")  || res.header(''Access-Control-Allow-Headers'', ''Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'');;
// app.all(''*'', function(req, res, next) {
//     res.header("Access-Control-Allow-Origin", "*");
//     res.header("Access-Control-Allow-Headers", "X-Requested-With");
//     res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
//     res.header("X-Powered-By",'' 3.2.1'')
//     res.header("Content-Type", "application/json;charset=utf-8");
//     next();
// });

// 接口
app.get(''/'', (req, res) => {
  res.send(''<div>hello world</div>'')
})
app.get(''/login'',(req, res) => {
  res.json(''<div>hello login</div>'')
})
app.get(''/checkMysqL'', (req, res) => {
  let sql = `SELECT * FROM person`;
  connection.query(sql, (err, result) => {
    if(err){
      console.log(err);
      res.send(`<p>err:${err}</p>`)
    }else{
      console.log(result);
      res.json(result)
    }
  })
})
// 设置端口
app.listen(3434, console.log("application is start at port 3434"));

module.exports = app;
    

tips: 以上全部代码,因为下班了,细节我就直接略过了,代码有注释;

启动node

指令:

npm start

正常启动后显示以下内容:

PS D:\server\nodeServer> npm start

> nodeserver@0.0.0 start D:\server\nodeServer
> babel-node app

application is start at port 3434
连接成功

最后随便打开一个浏览器,输入网址:http://127.0.0.1:3434/checkMysqL

会显示以下内容:

[
    {
        "number": 2,
        "name": "Yaya",
        "birthday": "2021-05-20T16:00:00.000Z",
        "age": 18,
        "member_id": 1,
        "cardID": 622455464,
        "phone": 1399985882,
        "address": null
    },
    {
        "number": 3,
        "name": "Long",
        "birthday": "2021-06-20T16:00:00.000Z",
        "age": 18,
        "member_id": 2,
        "cardID": null,
        "phone": 42221313,
        "address": null
    },
    {
        "number": 1,
        "name": "zhang",
        "birthday": "2021-12-10T16:00:00.000Z",
        "age": 20,
        "member_id": 3,
        "cardID": null,
        "phone": 546513221,
        "address": null
    }
]

我这边自己用的是postman: 感兴趣的朋友可以下载一下:postman传送门

最后附上截图:


总结

以上是小编为你收集整理的MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

原文地址:https://www.cnblogs.com/herotxl/p/14945927.html

node 连接MySQL及其分装, 连接池连接

node 连接MySQL及其分装, 连接池连接

const mysql = require(''mysql'')

const config = require(''./../../config/config.default'')

var connection = mysql.createConnection({
  host: config.database.HOST,
  user: config.database.USERNAME,
  password: config.database.PASSWORD,
  database: config.database.DATABASE
})

connection.connect(function(err) {
  if (err) {
    console.error(''error connecting: '' + err.stack)
    return
  }
  console.log(''Database connection successful, connected as id '' + connection.threadId)
})

//查询
// connection.query(`select * from area`, function(err, results, fields) {
//   if (err) throw err
//   console.log(results[0])
//   console.log(fields[0])
// })



//关闭连接
// connection.end(function(err) {
//   if (err) {
//     console.error(''数据库关闭失败'' + err)
//   }
//   console.log(''数据库关闭'')
// })

module.exports = connection
// 分装

const mysql = require(''mysql'')

const config = require(''./../../config/config.default'')

module.exports = {
  query: function(sql, params, callback) {
    var connection = mysql.createConnection({
      host: config.database.HOST,
      user: config.database.USERNAME,
      password: config.database.PASSWORD,
      database: config.database.DATABASE
    })
    connection.connect(function(err) {
      if (err) {
        console.error(''error connecting: '' + err.stack)
        throw err
      }
      console.log(''Database connection successful, connected as id '' + connection.threadId)
      connection.query(sql, params, function(err, results, fields) {
        if (err) throw err
        callback && callback(results, fields)
        connection.end(function(err) {
          if (err) {
            console.error(''数据库关闭失败'' + err)
            throw err 
          }
          console.log(''数据库关闭'')
        })
      })    
    })
  },
  // 连接池连接
  queryPool: function(sql, params, callback) {
    var pool = mysql.createPool({
      host: config.database.HOST,
      user: config.database.USERNAME,
      password: config.database.PASSWORD,
      database: config.database.DATABASE
    })
    pool.getConnection(function(err, connection) {
      // 使用连接
      connection.query(sql, params, function(err, results, fields) {
        if (err) throw err
        callback && callback(results, fields)
        connection.release()     
        console.info(''连接完成,不再使用,返回到连接池'')
      })
    })
  }
}


// 调用
const db = require(''./index'')


db.query(`select * from area`, [], function(result, fields) {
  console.log(''查询结果:'')
  console.log(result[0].name)
})

db.queryPool(`select * from area`, [], function(result, fields) {
  console.log(''查询结果:'')
  console.log(result[0])
})

  

 

const db = require(''../db'')
const query = db.queryPoolPromise

/**
 * @author afacode
 * SQL 操作
 * @date 2018.08.15
 */
let findAllUser = (value, col = ''*'') => {
  let _sql = `select ${col} from user_login where user_id = ?;`
  return query(_sql, value)
}
// 测试
async function user() {
  let user = await findAllUser([22], [''username'', ''password''])
  
console.log(user)
}

user()

  

 

  

node+mysql数据库连接池连接的方法是什么

node+mysql数据库连接池连接的方法是什么

mysql有两种连接方式:一种是直接连接 另一种是池化连接,我们这篇讲的是池化连接。

为了让解惑,我简答的写份直接连接的代码,如下:

var mysql = require(&#39;mysql&#39;);
var connection = mysql.createConnection({
  host     : &#39;localhost&#39;,
  user     : &#39;ac&#39;,
  password : &#39;123456&#39;,
  database : &#39;textPro&#39;
});
 
connection.connect();
 
connection.query(&#39;SELECT * from1 userInfo&#39;, function (error, results, fields) {
  if (error) throw error;
  console.log(&#39;The solution is: &#39;, results);
});
 
connection.end();
登录后复制

createConnection和createPool的区别是: createPool(连接池)连接可以更加合理的利用服务器资料,减少资料浪费

安装之后在db/index.js中开始编写:

const mysql = require("mysql")
 
//创建连接池
const db= mysql.createPool({  
    host : &#39;localhost&#39;, //连接主机
    port : 3306,   //端口号
    database : &#39;test&#39;,  //连接的是哪一个库
    user : &#39;root&#39;,   //用户名
    password : &#39;&#39;,    //密码
    connectionLimit : 50, //用于指定连接池中最大的链接数,默认属性值为10. 
    //用于指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立即抛出一个错误,
    //默认属性值为0.代表不允许被挂起的最大连接数。
    queueLimit:3 
})
登录后复制

建立了连接池之后,可以直接使用连接池对象的getConnection方法从连接池中获取一个连接,如果连接池中没有可用连接,将隐式的建立一个数据库连接。

const mysql = require("mysql")
 
//创建连接池
const db= mysql.createPool({  
    host : &#39;localhost&#39;, //连接主机
    port : 3306,   //端口号
    database : &#39;test&#39;,  //连接的是哪一个库
    user : &#39;root&#39;,   //用户名
    password : &#39;&#39;,    //密码
    connectionLimit : 50, //用于指定连接池中最大的链接数,默认属性值为10. 
    //用于指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立即抛出一个错误,
    //默认属性值为0.代表不允许被挂起的最大连接数。
    queueLimit:3 
})  
 
module.exports.query = (sql, values.callback) => {
  //err: 该参数是指操作失败时的错误对象。
  //connection: 该值为一个对象,代表获取到的连接对象。当连接失败时,该值为undefined。
  db.getConnection(function(err, connection) {
    if (err) {
      console.log(''与mysql数据库建立连接失败'');
      pool.releaseConnection(); //释放链接
    } else {
      console.log(''与mysql数据库建立连接成功'');
      connection.query(sql,values,(err, res) => {
        if (err) {
          console.log(''执行sql语句失败,查询数据失败'');
          //connection.release() 当一个连接不需要使用时,使用该方法将其归还到连接池中 release释放
          connection.release();
          callback(err,null)
        } else {
           console.log(''执行sql语句成功'');
           callback(null,res)
          //pool.end() 当一个连接池不需要使用时,可以使用该方法关闭连接池
          pool.end();
        }
      })
    }
  })
}
登录后复制

引入 调用db模块

const query=require(&#39;./db&#39;).query;
let sql=&#39;SELECT * FROM class WHERE class_id=? AND class_name=?&#39; 
let userId=1;
let userName=&#39;阿辰&#39;;
query(sql,[userId,userName],(err,res)=>{
    if(err){
        console.log(&#39;发生了错误***&#39;,err)
        return
    }
console.log(&#39;找到了&#39;,res)
})
登录后复制

const query=require(''./db'').query与const query=require(''./db'')区别

  • 第一种写法只获取到了"./db"模块中的query函数,如果需要使用其他导出项,则需要再次获取。

  • 第二种写法获取到了"./db"模块导出的所有项,不需要在代码中反复获取不同的导出项。

以上就是node+mysql数据库连接池连接的方法是什么的详细内容,更多请关注php中文网其它相关文章!

今天关于如何在 Node js 中保证 mysql 池连接?nodejs连接mysql的历程的讲解已经结束,谢谢您的阅读,如果想了解更多关于docker-compose:nodejs mysql无法连接mysql、MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库、node 连接MySQL及其分装, 连接池连接、node+mysql数据库连接池连接的方法是什么的相关知识,请在本站搜索。

本文标签: