NodeJS SQL 查询超时问题

NodeJS SQL Query Timeout Issue

提问人:Akshay Sharma 提问时间:11/17/2023 最后编辑:marc_sAkshay Sharma 更新时间:11/17/2023 访问量:33

问:

我有一个网站,它根据用户输入从 SQL Server 数据库中获取记录。我在后端遇到 SQL 超时问题。我无法对问题进行故障排除。

以下是导致问题的完整 () 代码:server.js

const express = require('express');
const mssql = require('mssql');

const app = express();
const PORT = process.env.PORT || 5999;

//SQL Database connection details
const config = {
  user: 'redacted',
  password: 'redacted',
  server: 'redacted',
  database: 'redacted',
  options: {
    encrypt: true,
    enableArithAbort: true,
  },
};

const pool = new mssql.ConnectionPool(config);

app.use(express.json());

app.get('/api/search', async (req, res) => {
  const searchTerm = req.query.term;

  try {
    console.log('Connecting to the database...');
    await pool.connect();
    console.log('Connected to the database.');
    const dbListResult = await pool.request().query('SELECT TOP (1) * FROM [dbo].[TableName1]');
    console.log('Databases:', dbListResult.recordset);

    const result = await pool
      .request()
      .input('searchTerm', mssql.NVarChar(300), `%${searchTerm}%`)
      .query('SELECT * FROM [dbo].[TableName1] WHERE Email LIKE @searchTerm');
       console.log('Query Output:', result.recordset)
      res.json(result.recordset);
  } catch (error) {
    console.error('Error executing query:', error);
    res.status(500).send('Internal Server Error');
  } finally {
    console.log('Closing the database connection.');
    await pool.close();
  }
});

app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

为了进行故障排除,我在代码中添加了一些调用。console.log

第一个查询成功执行,输出如下:

const dbListResult = await pool.request().query('SELECT TOP (1) * FROM [dbo].[TableName1]');
    console.log('Databases:', dbListResult.recordset);

但是此代码导致超时错误:

const result = await pool
      .request()
      .input('searchTerm', mssql.NVarChar(300), `%${searchTerm}%`)
      .query('SELECT * FROM [dbo].[TableName1] WHERE Email LIKE @searchTerm');
       console.log('Query Output:', result.recordset)
      res.json(result.recordset);

我得到的错误是这样的:

执行查询时出错:RequestError:超时:请求未能在 15000 毫秒内完成

在 /Users/redacted/Desktop/appweb/node_modules/mssql/lib/tedious/request.js:449:19 在 Array.forEach () 在 Request.userCallback (/Users/redacted/Desktop/appweb/node_modules/mssql/lib/tedious/request.js:446:46) 在 Request.callback (/Users/redacted/Desktop/appweb/node_modules/tedious/lib/request.js:239:14)



在 /Users/redacted/Desktop/appweb/node_modules/tedious/lib/connection.js:2662:24
在 process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
code: 'ETIMEOUT',
originalError: RequestError: Timeout: 请求未能在 15000 毫秒
内完成 在 Connection.requestTimeout (/Users/redacted/Desktop/appweb/node_modules/tedious/lib/connection.js:1232:21) 在 Timeout._onTimeout (/Users/redacted/Desktop/appweb/node_modules/tedious/lib/connection.js:1181:14)

在 listOnTimeout (node:internal/timers:573:17) at process.processTimers (node:internal/timers:514:7)
{
code: 'ETIMEOUT'
}, number: 'ETIMEOUT', lineNumber: undefined, state: undefined, class: undefined, serverName: undefined, procName: undefined,






precedingErrors: []

}

ReactJS 节点 .js SQL 服务器

评论

0赞 Akshay Sharma 11/17/2023
索引在表中实现。我能够使用MSSQL客户端在不到一秒钟的时间内获得输出。我使用客户端软件进行了测试。
0赞 T.J. Crowder 11/17/2023
索引只会对您有很大帮助。我们在说多少行?当你说你已经用MySQL客户端尝试过这个时,你是否在做完全相同的查询?相同的电子邮件地址等?从根本上说,无论您使用的是MySQL客户端还是代码,MySQL服务器都将花费大致相同的时间,除非您具有完全不同的连接参数。LIKE '%xyz%'
0赞 Akshay Sharma 11/17/2023
@T.J.Crowder,当我进行故障排除时,一切都是一样的。相同的查询,相同的电子邮件等。

答: 暂无答案