热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Express后,如何在每次请求后关闭mysql连接?

如何解决《使用Express后,如何在每次请求后关闭mysql连接?》经验,为你挑选了1个好方法。

我有一个像这样的路由器文件:

import express from 'express';
import health from './health';
import surface from './surface';

const router = express.Router();

router.use('/health', health);
router.use('/surface', surface);

router.get('*', (req, res) => {
  res.status(404);
  res.json({
    message: 'Uknown API endpoint'
  });
});

export default router;

在每个路由中,我使用NPM mysql包创建连接,然后在我打电话之前结束它res.send().IIRC创建连接并以每个查询结束它将是一个坏主意.

我试过做中间件,如:

router.use((req, res, next) => {
  next();
  mySingletonWrappingMysql.connection.end();
});

鉴于我的路线正在做异步事情,endConnection呼叫过早发生.next是不是真的异步,所以我做不到await next,我甚至不确定这将是正确的方式/地方去做.此示例使用单例,因为我也不确定如何正确设置要在路径中使用的新实例.req.param似乎是一个不是最佳原因的选项,似乎是特殊查询param vars.



1> O. Jones..:

您需要一个到MySQL的连接池.这是一个可串行重用的连接资源池.你需要的时候抓住一个,当你完成后就把它拿走.因此,每个请求,甚至每个中间件调用,都可以使用连接而不必担心并发(这对连接不起作用).看到这个.https://www.npmjs.com/package/mysql#pooling-connections

像这样设置你的游泳池,只需一次.每个node.js服务器实例都需要一个池,用于它使用的每个单独的MySQL服务器.

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password        : 'secret',
  database        : 'my_db'
});

此createPool操作创建一个最多包含十个连接的池.每次使用池时,它都会检查其所有连接是否都很忙.如果没有,它会让你空闲使用.如果他们都忙,它会打开一个新的.但是,如果池中已经有connectionLimit连接使用,它将等待一个空闲.

然后随意的一次性查询就像这样工作.在REST服务器中,您可能会发现对数据库的单个查询可以满足某些GET查询.这些都非常简单.没有必要明确地从池中获取或释放连接.并且,当您释放连接时,它将保持与DBMS的连接,以备将来的请求使用.如果满足特定请求需要两个或三个SELECT查询,您也可以使用此技术.但是,每个查询可能使用池中的不同连接.

 pool.query('SELECT whatever FROM whatever', 
   function (error, results, fields) {
     if (error) throw error;
     /* handle your results array */
 })

如果你需要为多个查询获取连接,它几乎一样简单,但你需要在完成后记住release()连接.当您的某些查询依赖于序列中先前查询的结果时,您需要执行此操作.

pool.getConnection(function(err, connection) {
    if (error) throw error;
    connection.query('INSERT INTO sometable ...', 
       function (error, results, fields) {
           if (error) {
               connection.release();
               throw error;
           }
           connection.query('INSERT INTO detail ... (LAST_INSERT_ID()...)', 
               function (error, results, fields) {
                  connection.release();
                  if (error) throw error;
               });
       });
});

您可能希望使用promises来避免函数嵌套,尤其是在您想要运行一系列查询时.


推荐阅读
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
author-avatar
阿日小子很顽强_756
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有