NodeJS到SQL Server的连接不工作:套接字挂起问题

wwwo4jvm  于 2023-01-25  发布在  SQL Server
关注(0)|答案(3)|浏览(160)

这是我的SQL连接的完整代码,所有代码我都从堆栈溢出问题。到处,我发现相同的代码是建议,因此我也尝试了相同的。我有一些其他的应用程序使用相同的连接与NextJS和它的工作很好,但是,如果我尝试只与NodeJS代码,它给出了一些套接字挂起错误(代码:'ESOCKET'名称:'ConnectionError')。请注意,TCP已经配置在远程服务器上,它的工作与其他应用程序罚款。
任何帮助都很感激,谢谢。

const express = require('express');
const fs = require('fs');
const path = require('path');
const cheerio = require("cheerio");
const sql = require('mssql');

require('dotenv').config(); //to use the env variables

// config for your database
var config = {
    user: process.env.DATABASE_USER,
    password: process.env.DATABASE_PASSWORD,
    server: process.env.DATABASE_HOST,
    database: process.env.SOMEDB,
    port: 14345, // process.env.DATABASE_PORT,
    options: {
        encrypt: true, // for azure
        trustServerCertificate: false // change to true for local dev / self-signed certs
    }
};

        // make sure that any items are correctly URL encoded in the connection string
        let appPool = new sql.ConnectionPool(config);
        
        //I got error on below connect
        sql.connect(config).then(function(pool) {
            //It never reaches here, it directly goes to the catch block
            app.locals.db = pool;
            const server = app.listen(3000, function () {
              const host = server.address().address
              const port = server.address().port
              console.log('Example app listening at http://%s:%s', host, port)
            })
          }).catch(function(err) {
            console.error('Error creating connection pool', err)
          });
xiozqbni

xiozqbni1#

我也有同样的问题,尝试使用mssql版本6.0.1,它可以在我的代码上工作,但是我们确实需要找出问题所在,因为我们不能永远保留一个旧版本的包。

juzqafwq

juzqafwq2#

我一直试图找到不同配置更改的解决方案。最后,我做了一个适当的配置,它工作了,现在它的连接正确,以及从表中返回数据。

require('dotenv').config(); //to access the process.env params

const sql = require("mssql"); //mssql object

var dbConfig = {
    user: "ajay",
    password: "abcd123",
    server: "your_remote_sql_server_path",
    port: 1433,
    database: "your_database_name",
    options: {
        database: 'your_database_name',
        trustServerCertificate: true
    }
};

try {
        //connection config will be used here to connect to the local/remote db
        sql.connect(dbConfig)
            .then(async function () {
                // Function to retrieve the data from table
                const result = await sql.query`select top 1 * from table_name`
                console.dir(result)
                
            }).catch(function (error) {
                console.dir(error);
            });
    } catch (error) {
        console.dir(error);
    }

我不知道确切的问题是什么,但根据以前的配置和这一个,似乎添加数据库名称到options已经解决了这个问题。
请确保将所有敏感数据保存到.env文件。(您可以作为PROCESS.env.parametername访问该文件)

7vhp5slm

7vhp5slm3#

对于我,在驱动程序mssql@9.1.1中加密=false工作

const config = {
    user: process.env.DATABASE_USER,
    password: process.env.DATABASE_PASSWORD,
    server: process.env.DATABASE_HOST,
    database: process.env.SOMEDB,
    port: 14345, // process.env.DATABASE_PORT,
    options: {
        encrypt: false
    }
};

相关问题