Node.js连接SQL Server报错:TypeError: pool.query is not a function
解决TypeError: pool.query is not a function问题
错误原因
你当前的dbconfig文件只是导出了一个配置对象,并非真正的SQL Server连接池实例,自然不存在query方法。
解决方案
1. 安装必要依赖
确保已安装mssql包(Node.js连接SQL Server的主流库),执行命令:
npm install mssql # 或 yarn add mssql
2. 修改dbconfig文件,创建连接池实例
将原dbconfig内容替换为以下代码,生成并导出可用的连接池:
const sql = require('mssql'); const poolConfig = { user: process.env.USER, password: process.env.PASS, server: process.env.SERVER, database: process.env.DB, options: { encrypt: false, trustServerCertificate: true, instancename: 'MSSQLSERVER' }, port: 1433 }; // 创建连接池实例 const pool = new sql.ConnectionPool(poolConfig); // 预连接并捕获初始化错误 const poolConnect = pool.connect().catch(err => console.error('连接池初始化失败:', err)); module.exports = { sql, pool, poolConnect };
3. 调整控制器代码
修改控制器逻辑,确保使用正确的连接池实例,并优先等待连接池完成初始化:
const { pool, poolConnect } = require("../../config"); module.exports = { create: async (data, callback) => { try { // 等待连接池完成连接 await poolConnect; // 执行插入操作,使用命名参数避免顺序错误 const result = await pool.query( `INSERT INTO testRegistration (userName, password, email) VALUES (@userName, @password, @email)`, { userName: data.userName, password: data.password, email: data.email } ); callback(null, result); } catch (error) { callback(error); } } };
额外检查项
- 确认环境变量(
process.env.USER、process.env.PASS等)已正确加载,可通过console.log(process.env.USER)验证。 - 如果使用
dotenv管理环境变量,需在项目入口文件(如app.js)中执行require('dotenv').config()。
内容的提问来源于stack exchange,提问作者Muhammad Osama
相关产品推荐
相关产品推荐

