添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在开发项目时,建立一个数据库连接所消耗的性能成本是比较高的,如果为每一个接收到的客户端请求都建立一个或者多个数据库连接,将会严重降低应用程序的性能,因此,通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要使用时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,可以从连接池中取出连接并重新利用,而不需要再重新建立数据库连接

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

1.connection.release() 当一个连接不需要使用时,使用该方法将其归还到连接池中

2.connection.destroy() 当一个连接不需要使用且需要从连接池中移除时,可以使用该方法

3.pool.end() 当一个连接池不需要使用时,可以使用该方法关闭连接池

注意:可以使用createPool方法的属性connectionLimit设置连接池中的最大连接数,默认为10

注明:引用eg:

//创建并使用连接池对象  
var mysql = require('mysql');  
var pool = mysql.createPool({  
    host : 'localhost',  
    port : 3306,  
    database : 'test',  
    user : 'root',  
    password : ''     
pool.getConnection(function(err,connection){  
    if(err){  
        console.log('与mysql数据库建立连接失败');  
    }else{  
        console.log('与mysql数据库建立连接成功');  
        connection.query('select * from admin',function(err,rows){  
            if(err){  
                console.log('查询数据失败');  
            }else{  
                console.log(rows);  
                pool.end();  

项目中应用:eg:
一、connect.js

// 创建连接池
const mysql = require('mysql');
const express = require('express');
const app = express();
const router = express.Router();
// 解析参数
const bodyParser = require('body-parser');
// json请求
app.use(bodyParser.json());
//表单请求
app.use(bodyParser.urlencoded({extended: false}));
 * 配置mysql
const option = {
	host: 'localhost',
	user: 'root',
	password: 'root',
	port: '3306',
	database: 'nodecms',
	connecTimeout: 500,//连接超时
	multipleStatements: false//是否允许一个query中包含多条sql语句
let pool;
repool();
function Res ({code = 200, msg = '', data = {}}){
	this.code = code;
	this.msg = msg;
	this.data = data;
function resJson (_res, result) {
	return _res.json(new Res(result))
//断线重连机制
function repool() {
	//创建连接池
	pool = mysql.createPool({
		...option,
		waitForConnection: true,//当无连接池可用时,等待(true) 还是抛错(false)
		connectionLimit: 100,//连接限制
		queueLimit: 0//最大连接等待数(0为不限制)
	pool.on('error', err => {
		err.code === 'PROTOCOL_CONNECTION_LOST' &&setTimeout(repool, 2000);
	app.all('*', (_,__, next) => {
		pool.getConnection(err => {
			err && setTimeout(repool, 2000) || next();
module.exports = {app, pool, router, resJson}

二、
user.js

* 用户登录功能 router.get('/login', (req, res) => { let user = { username: req.query.name, password: req.query.password let _res = res; //判断参数是否为空 if(!user.username) { return resJson(_res, { code: -1, msg: '用户名不能为空' if(!user.password) { return resJson(_res, { code: -1, msg: '密码不能为空' let _data; //从连接池获取连接 pool.getConnection((err, conn) => { conn.query(userSQL.queryByNamePassword, [user.username, user.password], (e, result) => { if(e) _data= { code: -1, msg: e // 通过用户名和密码索引查询数据,用数据说明用户存在且密码正确, // 只能返回登录成功,否则返回用户不存在或登录密码错误 if (result && result.length) { _data = { msg: '登陆成功', data: { userInfo: { usrename: user.username } else { _data = { code: -1, msg: '用户名不存在或登录密码错误' resJson(_res, _data); pool.releaseConnection(conn);//释放连接池,等待别的连接池使用 在开发项目时,建立一个数据库连接所消耗的性能成本是比较高的,如果为每一个接收到的客户端请求都建立一个或者多个数据库连接,将会严重降低应用程序的性能,因此,通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要使用时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,可以从连接池中取出连接并重新利用,而不需要再重新建立数据库连接在mysql模块中,使用createPool方法创建连接池,在建立了连接池之后,可以直接使用连接池对象的getConnection方法从连接池中获取一个连接,如果连接池中
在开发项目时,建立一个数据库连接所消耗的性能成本是比较高的,如果为每一个接收到的客户端请求都建立一个或者多个数据库连接,将会严重降低应用程序的性能,因此,通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要使用时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,可以从连接池中取出连接并重新利用,而不需要再重新建立数据库连接 在mysql模块中,使用createPool方法创建连接...
1.什么是mysql连接池 数据库连接池是程序启动时有足够的数量的数据库连接对象,组成的一个池子,由node程序动态调用池子中的对象,进行连接,使用,释放,关闭等操作 2.为什么要使用mysql连接池 为什么要使用mysql连接池,而不是单一的连接mysql,使用就链接,使用完就关闭,这不是挺方便的吗? 恩~~~~ 一开始我也是图方便就参考了网上的代码,使用单一链接mysql的,但是出现了一个问题:就是我连接完之后我关闭了,这个期间,我又一个程序又要执行mysql,但是这个期间另一个程序以为是链接mysql
async.parallel是流程控制里边io并行的控制方法,如果async.parallel里边没有io操作,那么里边的函数执行都是串行的。 这里讨论一下参数接收的问题,上代码: var async = require('async'); function process1(cb){ var tx1 = {address:'dadada'}; var total1 = 1;...
确实,`layui.upload.render` 方法返回的上传组件实例并没有 `destroy` 方法。如果你需要销毁上传组件实例,可以使用 `delete` 关键字删除该实例的引用,以便在下一次 JavaScript 垃圾回收时自动销毁。例如: var uploadInst = layui.upload.render({ // 上传组件配置 // 销毁上传组件实例 delete uploadInst; 如果你需要在页面刷新或关闭时手动销毁上传组件实例,可以将上传组件实例存储到一个全局变量中,在需要销毁时遍历该变量并逐个销毁。例如: // 存储上传组件实例的全局变量 var uploadInstArr = []; // 初始化上传组件实例并存储到全局变量中 uploadInstArr.push(layui.upload.render({ // 上传组件配置 // 销毁上传组件实例 for (var i = 0; i < uploadInstArr.length; i++) { delete uploadInstArr[i]; uploadInstArr = []; 希望这能帮助你解决问题。如果你需要更多的帮助,请提供更多的代码和上下文,以便更好地理解问题并提供更准确的帮助。