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

Node.js多SQL Server数据库配置连接报错求助

解决方案

错误原因

你当前的login.js尝试动态加载名为dbConfig.${selectedDB}的文件,但实际上所有数据库配置都集中在dbConfig.js一个文件里,并没有对应命名的独立文件,所以Node.js找不到模块,抛出错误。

修复步骤及代码

1. 修正数据库配置引入逻辑

直接引入统一的dbConfig.js文件,从导出的配置对象中根据selectedDB取值,而非动态加载不存在的文件。

2. 增加参数合法性校验

校验传入的selectedDB是否在预定义的配置列表中,避免因非法参数导致连接失败。

3. 修复SQL注入风险

当前用字符串拼接生成SQL语句存在严重的SQL注入漏洞,改用mssql的参数化查询方式。

4. 优化连接资源管理

使用try/finally确保连接无论成功失败都能关闭,避免资源泄漏。

修改后的login.js代码:

const express = require('express');
const sql = require('mssql');
const router = express.Router();
// 直接引入统一的dbConfig配置文件
const dbConfigs = require('./databases/dbConfig');

const dbConnection = (selectedDB) => {
    // 从配置对象中获取对应数据库的配置
    const dbConfig = dbConfigs[selectedDB];
    if (!dbConfig) {
        throw new Error(`Invalid database selection: ${selectedDB}`);
    }
    return new sql.ConnectionPool(dbConfig);
}

router.get('/', async (req, res) => {
    let connection;
    try {
        const selectedDB = req.query.selectedDB;
        const userName = req.query.userName;
        const password = req.query.password;

        // 校验必要参数是否存在
        if (!selectedDB || !userName || !password) {
            return res.status(400).send('Missing required parameters');
        }

        connection = dbConnection(selectedDB);
        await connection.connect();

        // 使用参数化查询避免SQL注入
        const result = await connection.request()
            .input('userName', sql.NVarChar, userName)
            .input('password', sql.NVarChar, password)
            .query('SELECT * FROM KULLANICI WHERE KULLANICIADI = @userName AND SIFRE = @password');

        const data = JSON.stringify(result.recordset);
        res.send(data);
    } catch (err) {
        console.error(err);
        res.status(500).send(err.message || 'Server error');
    } finally {
        // 确保连接关闭
        if (connection?.close) {
            await connection.close();
        }
    }
});

module.exports = router;

额外说明

  • 确认dbConfig.js的路径正确:如果login.js在routes目录,dbConfig.js在databases目录,./databases/dbConfig这个相对路径是正确的。
  • 测试时需确保传入的selectedDB参数是dbOnlineMesai、dbOnlineBekci或dbOmsGuvenlik中的一个,否则会触发参数错误提示。

内容的提问来源于stack exchange,提问作者ahmetkrakaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:47:05