每次为新的 API 调用创建新的繁琐连接?

Posted

技术标签:

【中文标题】每次为新的 API 调用创建新的繁琐连接?【英文标题】:create new tedious connection every time for a new API call? 【发布时间】:2021-10-28 19:15:10 【问题描述】:

我正在创建 Express JS 作为我的 API 服务器,使用繁琐的方法连接到我的 SQL Server 数据库。

目前,在每个请求逻辑中,我都会创建一个新的繁琐的 Connection 对象,连接到 DB,执行查询,然后关闭连接。

import  Connection  from 'tedious';
export class Controller 
  all(_: Request, res: Response): void 

    const connection = new Connection(getConfig()); // create a new connection everytime

    connection.on('connect', (err) => 
      if (err) 
        console.log('Connection Failed');
        throw err;
      
      getProducts(connection, _, res); // in there at the end, will call connection.close()
    );

    connection.connect();
  
import  Request, Response  from 'express';
import  Connection, Request as SqlReq  from 'tedious';
export default function getProducts(connection: Connection, _: Request, res: Response) 
    const query = `SELECT * FROM Production.Product FOR JSON PATH;`;
    let resultJson = ''; // prepare this result in return from SQL query

    const sqlReq = new SqlReq(query, (err, _) => 
      if (err) 
        throw err;
      

      // when request finished
      connection.close();
      res.json(JSON.parse(resultJson));
    );

每次为新的 API 调用创建连接、连接和关闭是好还是坏?如果有更好的方法来处理连接,我可以提供任何参考或示例吗?

【问题讨论】:

【参考方案1】:

只需确保使用此功能只创建一次连接即可。它将仅在第一次调用时创建连接,并在后续调用时返回先前创建的连接。

var connection = null;
const getConnection = async () => 
  if (connection) return connection;

  connection = new Connection(getConfig());
  return tmp;
;

那么你应该通过不调用close来保持连接打开。

【讨论】:

【参考方案2】:

mysql 中更好地使用连接池。在应用程序启动期间,您可以创建一个用于连接数据库的线程池。如果您从池中检索并建立连接,它将非常快。 查询执行/操作后,确保释放连接。因此它将进入连接池并可供进一步请求。

参考:How do I create a MySQL connection pool while working with NodeJS and Express?

Ref : 释放​​连接 node.js + mysql connection pooling

【讨论】:

以上是关于每次为新的 API 调用创建新的繁琐连接?的主要内容,如果未能解决你的问题,请参考以下文章

为新的 yaml-cpp API 定义自定义输入类型

将我们自己的 OAuth 2 代码从旧的人员 API 转换为新的人员 API

Apache Flink DataSet API:如何将 Flink DataSet 与自身合并为新的?

Ingenico .net SDK 集成 - 进行任何 API 调用时出现未经授权和连接关闭异常

在visual studio 2010中为新的QOBJECT文件生成MOC

如何通过 Windows API GetExtendedTCpTable 检测新的 TCP 连接