我需要为模块提供SQL连接(使用名为mssql的库),所以我提供了这样的代码:
var config = {
server: "149.xxx.xx.x",
database: "Database",
user: "User",
password: "Password",
connectionTimeout: 300000,
requestTimeout: 300000,
pool: {
idleTimeoutMillis: 300000,
max: 100
}
};
function getEmp() {
var connection = new sql.Connection(config);
var req = new sql.Request(connection);
connection.connect(function (error) {
if(error) {
console.log(error);
return;
}
req.query('Procedure', function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
connection.close();
});
});
}
getEmp();`
我收到错误:
{ ConnectionError: Failed to connect to 149.xxx.xx.x:1433 - connect
ETIMEDOUT 149.xxx.xx.x:1433 at Connection.<anonymous>
(/Users/xx/Learning/NodeJS/srv-express/node_modules/mssql/lib/tedious.js:353:25)
at Connection.g (events.js:292:16) at emitOne (events.js:96:13) at
Connection.emit (events.js:188:7) at Connection.socketError
(/Users/xx/Learning/NodeJS/srv-express/node_modules/tedious/lib/connection.js:791:12)
at Socket.<anonymous>
(/Users/xx/Learning/NodeJS/srv-express/node_modules/tedious/lib/connection.js:33:15)
at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at
emitErrorNT (net.js:1277:8) at _combinedTickCallback
(internal/process/next_tick.js:80:11)
name: 'ConnectionError', message: 'Failed to connect to
49.xxx.xx.x:1433 - connect ETIMEDOUT 149.xxx.xx.x:1433', code: 'ESOCKET' }
确保数据正确 - DataGrip在这里正常连接。
我在谷歌发现了类似的问题,问题是禁用了TCP / IP。我检查过这个,它已经通过这个端口1443启用了。启用TCP / IP,命名管道和共享内存。
TCP动态端口:1443 TCP端口:空
答案 0 :(得分:2)
要查找18456错误“登录用户失败...”的原因,应检查SQLServer错误日志。
如果是
原因:无法打开显式指定的数据库'数据库 名称
首先应检查数据库的状态,如果它在线,如下:
select name,
user_access_desc,
state_desc
from sys.databases where name='yourDatabase'
如果数据库在线,下一步是检查用户是否可以访问数据库(如果它已映射到数据库:)
select *
from yourDB.sys.database_principals
where name = 'YourUserName';
此代码仅用于检查与sql server登录对应的用户的存在(Windows登录可以使用Windows组登录访问服务器,用户也是如此)
如果用户不存在,我们应该为此登录创建用户并为其授予适当的权限。这是用户cteation的链接 CREATE USER (Transact-SQL)