Node.js和SQL Server的Windows身份验证连接

6
我正在尝试将 node.js 与 Windows 身份验证模式下的 mssql 进行连接。我安装了 tediousmssqlmsnodesqlv8 模块,但我仍然不知道如何打开连接。
这是我尝试过的内容:
    var sql = require('mssql');
    var config = {
    driver: 'msnodesqlv8',
    server: 'POPPY-GI\\SQLEXPRESS',
    database: 'NodinSports',
    options:{
    trustedConnection: true,
    useUTC: true}}

    sql.connect(config).then(function() { 
    new sql.Request().query('select * from users')
    .then(function(recordset){
    console.log(recordset);
    }).catch(function(err) {
    console.log(err);});
    }).catch(function(err) {
    console.log(err);});

运行后,我得到了一个长长的错误信息:

    `ConnectionError`: Port for `SQLEXPRESS` not found in 
 `ServerName`;POPPYGI;`InstanceName;SQLEXPRESS;IsClustered`;No;Version;12.0.2000.8;;

    at Connection.tedious.once.err (D:\Never Lazy\University\`AN2, SEM 2\WEB\`Projek`\node_modules\`mssql`\lib\`tedious.js:216:17`)

    at Connection.g (events.js:291:16)
    at emitOne (events.js:96:13)
    at Connection.emit (events.js:188:7)
    at D:\Never Lazy\University\AN2,SEM2\WEB\Projekt\node_modules\tedious\lib\connection.js:570:27
    at D:\Never Lazy\University\AN2,SEM2\WEB\Projekt\node_modules\tedious\lib\instance-lookup.js:91:24
    at Socket.onMessage (D:\Never Lazy\University\AN2,SEM2\WEB\Projekt\node_modules\tedious\lib\sender.js:140:9)
    at emitTwo (events.js:106:13)
    at Socket.emit (events.js:191:7)
    at UDP.onMessage (dgram.js:549:8)
    code: 'EINSTLOOKUP',

我很感谢您的帮助。

修复:

services.msc 中检查以下内容是否启用:

SQL Server(*server_name*) -- in my case `SQLEXPRESS`
SQL Server Browser
SQL Server Agent(*server_name*) -- if you are using `SQLEXPRESS` this doesn't need to run

在 SQL Server 配置管理器中,转到 server_name 的协议:启用 TCP/IP
为确保一切正常,请检查服务器使用的端口(SQL Server 配置管理器 -> SQL Native Client Configuration -> 客户端协议 -> 双击 TCP/IP -> 默认端口),并将 port: *your_port* 添加到 var config = { ... } 中的代码中。
最后,将 var sql = require('mssql'); 更改为 var sql = require("mssql/msnodesqlv8");

POPPYGI是远程服务器吗?SQL浏览器服务正在运行吗?您能否使用SSMS连接到此实例?该服务实际上使用的端口是多少(SQL日志将告诉您)? - David Browne - Microsoft
本地服务器,SQL浏览器服务正在运行,端口为1433。我不太明白你所说的“使用SSMS连接到此实例”的意思。 我已将端口:1433添加到“config”中,现在出现错误,显示:“ConnectionError:用户''登录失败。”[...] - Brigitta
谢谢你的帮助,问题已解决。^_^ - Brigitta
如果您解决了问题,可以回答自己的问题!这也会将其从未回答的队列中移除。 - Kris Lawton
3个回答

2
安装以下模块:
"dependencies": {
    "msnodesqlv8": "^0.4.14",
    "mssql": "^4.1.0"
  }

我的 Node 版本:v8.1.4
const sql = require("mssql/msnodesqlv8");

const main = async () => {
  const pool = new sql.ConnectionPool({
    server: "myservername",
    database: "mydbname",
    options: {
      trustedConnection: true
    }
  });

  await pool.connect();

  const request = new sql.Request(pool);

  const query = `SELECT [FirstName]
    ,[LastName]
    ,[Email]
FROM [Dev].[Users]`;

  const result = await request.query(query);

  console.dir(result);
};
main();

你可以不使用异步或旧版本来完成这个操作:https://dev59.com/01sX5IYBdhLWcg3whvwn#40406998

1
如果我没记错的话,msnodesqlv8只能在Windows上运行...那么在其他平台上该怎么做呢? - Michael
关于先前节点版本的软件包版本,做得很好! - Matteo Pieroni

1

beatoss提供的解决方案适用于Windows,但不适用于Linux/mac。msnodesqlv8驱动程序仅适用于Windows。对于Linux/mac环境,请尝试使用odbc


1
嘿,你的回答应该是针对问题具体而言,而不是泛泛而谈。你可以编辑你的回答。 - Ajay Kharade

0
可能已经太晚回答了,但最近这件事让我疯了!!!我试图将我的数据库连接到Express,并使用Windows身份验证模式。连续两天,我一直在谷歌搜索和刷新,直到我找到了这篇文章:https://www.liquidweb.com/kb/troubleshooting-microsoft-sql-server-error-18456-login-failed-user/
简而言之;
首先,我在我的服务器上安装了用于Windows身份验证的msnodesqlv8驱动程序,在ssms中右键单击我的服务器,然后选择属性,再选择安全性,启用SQL服务器和Windows身份验证模式,然后在对象资源管理器中,点击服务器旁边的加号,然后选择安全性,再选择登录。在那里,我看到了带有一个叉的sa。在其属性中,我将密码更改为更容易记住的内容(可选),然后设置登录状态为启用。呼!
现在是我的配置代码:

    const config = {
    user: 'sa',
    password: '123',
    driver: "msnodesqlv8",
    server: 'UZAIR-S_PC\\SQLEXPRESS',
    database: 'LearningExpressJS',
    options: {
        trustedconnection: true,
        enableArithAbort : true, 
        trustServerCertificate: true,
        instancename: 'SQLEXPRESS'
    },
    port: 58018
}

这终于有效了!!!!!!!

1
你的回答与Windows身份验证无关。你的回答建议允许SQL Server身份验证,这与Windows身份验证不同。 - Hassaan
1
这是唯一对我有效的解决方案。 - Uzair_07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接