提问人:Akshay Sharma 提问时间:11/17/2023 最后编辑:marc_sAkshay Sharma 更新时间:11/17/2023 访问量:33
NodeJS SQL 查询超时问题
NodeJS SQL Query Timeout Issue
问:
我有一个网站,它根据用户输入从 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: []
}
答: 暂无答案
评论
LIKE '%xyz%'