NodeJS 到 SQL 服务器连接不工作:套接字挂起问题
NodeJS to SQL Server Connection not working: socket hang up issue
这是我的 sql 连接的完整代码,我从 Whosebug 问题中获得的所有代码。
到处,我发现都在建议相同的代码,因此我也尝试了相同的代码。
我有一些其他应用程序使用与 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)
});
我有同样的问题。
尝试使用 mssql 版本 6.0.1,它适用于我的代码,但我们肯定需要找出问题所在,因为我们不能想永远维护旧版本的包。
我一直在尝试通过不同的配置更改找到解决方案。
最后,我做了一个正确的配置,它工作正常,现在它正确连接并从 table.
返回数据
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)
这是我的 sql 连接的完整代码,我从 Whosebug 问题中获得的所有代码。 到处,我发现都在建议相同的代码,因此我也尝试了相同的代码。 我有一些其他应用程序使用与 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)
});
我有同样的问题。 尝试使用 mssql 版本 6.0.1,它适用于我的代码,但我们肯定需要找出问题所在,因为我们不能想永远维护旧版本的包。
我一直在尝试通过不同的配置更改找到解决方案。 最后,我做了一个正确的配置,它工作正常,现在它正确连接并从 table.
返回数据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)