想了解如何在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的历程)
- docker-compose:nodejs mysql无法连接mysql
- MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库
- node 连接MySQL及其分装, 连接池连接
- node+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
我尝试对自己的节点应用程序进行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 实现接口连接数据库
导言: 由于本人初次尝试,真的一言难尽啊!遇到很多问题, 问题我会列出来,如果你有好的方法实现欢迎留言!
问题:
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及其分装, 连接池连接
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数据库连接池连接的方法是什么
为了让解惑,我简答的写份直接连接的代码,如下:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'ac', password : '123456', database : 'textPro' }); connection.connect(); connection.query('SELECT * from1 userInfo', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results); }); connection.end();
createConnection和createPool的区别是: createPool(连接池)连接可以更加合理的利用服务器资料,减少资料浪费
安装之后在db/index.js中开始编写:
const mysql = require("mysql") //创建连接池 const db= mysql.createPool({ host : 'localhost', //连接主机 port : 3306, //端口号 database : 'test', //连接的是哪一个库 user : 'root', //用户名 password : '', //密码 connectionLimit : 50, //用于指定连接池中最大的链接数,默认属性值为10. //用于指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立即抛出一个错误, //默认属性值为0.代表不允许被挂起的最大连接数。 queueLimit:3 })
建立了连接池之后,可以直接使用连接池对象的getConnection方法从连接池中获取一个连接,如果连接池中没有可用连接,将隐式的建立一个数据库连接。
const mysql = require("mysql") //创建连接池 const db= mysql.createPool({ host : 'localhost', //连接主机 port : 3306, //端口号 database : 'test', //连接的是哪一个库 user : 'root', //用户名 password : '', //密码 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('./db').query; let sql='SELECT * FROM class WHERE class_id=? AND class_name=?' let userId=1; let userName='阿辰'; query(sql,[userId,userName],(err,res)=>{ if(err){ console.log('发生了错误***',err) return } console.log('找到了',res) })
const query=require(''./db'').query与const query=require(''./db'')区别
第一种写法只获取到了"./db"模块中的query函数,如果需要使用其他导出项,则需要再次获取。
第二种写法获取到了"./db"模块导出的所有项,不需要在代码中反复获取不同的导出项。
以上就是node+
今天关于如何在 Node js 中保证 mysql 池连接?和nodejs连接mysql的历程的讲解已经结束,谢谢您的阅读,如果想了解更多关于docker-compose:nodejs mysql无法连接mysql、MySQL之旅 nodeJS + express + MySQL 实现接口连接数据库、node 连接MySQL及其分装, 连接池连接、node+mysql数据库连接池连接的方法是什么的相关知识,请在本站搜索。
本文标签: