使用Node.js连接Microsoft SQL Server 2014时代码出错如何解决
Node.js连接Microsoft SQL Server 2014代码问题排查
现有代码的问题清单
- 变量名不匹配:定义的数据库配置变量是
config,但调用sql.connect()时传的是sqlConfig,参数读取直接失败。 - 服务启动逻辑错误:
app.listen()被放在app.get('/')的请求回调中,必须用户访问一次根路由服务才会启动,不符合常规启动逻辑,应该放在全局作用域,项目启动时仅执行一次。 - 语法与变量使用错误:打印服务启动日志的内容用了单引号包裹,要解析
${PORT}必须用反引号包裹的模板字符串;同时预先定义的端口变量是小写port,日志中写成了大写PORT,变量不匹配无法正确取值。 - 缺少数据库必要配置:针对本地运行的SQL Server 2014,需要补充
options配置关闭加密校验,否则高版本mssql依赖会触发连接报错。 - 错误捕获不完整:
request.query()返回Promise,仅写了then回调没有catch回调,SQL查询报错时会触发未捕获异常导致进程退出。 - 连接逻辑不合理:每次访问根路由都会新建一次数据库连接,没有复用连接或使用连接池,高并发场景下会直接耗尽数据库连接数。
修复后的参考代码
const sql = require("mssql"); const express = require('express'); const app = express(); const port = 3000; // 可替换为自定义监听端口 /*-------------------数据库配置-----------------*/ const sqlConfig ={ user: 'sa', password: '替换为你的sa账户密码', server: 'localhost', database: 'test', // 补充SQL Server 2014本地连接必要配置 options: { encrypt: false, // 本地连接无需加密 trustServerCertificate: true // 信任本地自签名证书 } }; // 全局初始化数据库连接,项目启动时仅执行一次 async function initDB() { try { await sql.connect(sqlConfig); console.log('数据库连接成功'); } catch (err) { console.error('数据库连接失败:', err); process.exit(1); // 连接失败直接退出进程 } } initDB(); // 根路由业务逻辑 app.get('/', async function(req, res){ try { const request = new sql.Request(); const queryResult = await request.query('select * from 替换为你的表名'); console.log('SQL查询结果:', queryResult); res.send('数据库操作成功,结果已打印到服务端控制台'); } catch (err) { console.error('操作失败:', err); res.status(500).send('操作失败:' + err.message); } }); // 全局启动服务,仅执行一次 app.listen(port,function(){ console.log(`Server started at ${port}`); });
内容的提问来源于stack exchange,提问作者Roqaia Alrfou
相关产品推荐
相关产品推荐

