You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:45:03