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



我正在尝试在Windows身份验证模式下将node.js连接到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 LazyUniversity`AN2, SEM 2WEB`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 LazyUniversityAN2,SEM2WEBProjektnode_modulestediouslibconnection.js:570:27
    at D:Never LazyUniversityAN2,SEM2WEBProjektnode_modulestediouslibinstance-lookup.js:91:24
    at Socket.onMessage (D:Never LazyUniversityAN2,SEM2WEBProjektnode_modulestediouslibsender.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 Configuration Manager -> Protocols for server_name 中:启用 TCP/IP

为了确保一切正常,请检查服务器正在使用的端口(SQL Server 配置管理器 -> SQL 本机客户端配置 -> 客户端协议 ->双击TCP/IP ->默认端口(,然后将port: *your_port*添加到 var config = { ... } 中的代码中。

最后,将var sql = require('mssql');更改为var sql = require("mssql/msnodesqlv8");

安装以下模块:

"dependencies": {
    "msnodesqlv8": "^0.4.14",
    "mssql": "^4.1.0"
  }

我的节点版本: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://stackoverflow.com/a/40406998/639575(

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

现在回答可能为时已晚,但这最近发生在我身上,让我发疯!!我正在尝试将我的数据库连接到表达并使用 Windows 身份验证模式。整整两天,我一直在谷歌上搜索和刷新,直到我得到这篇文章:https://www.liquidweb.com/kb/troubleshooting-microsoft-sql-server-error-18456-login-failed-user/
简而言之;首先,我在 ssms 上的服务器中安装了用于 Windows 身份验证的 msnodesqlv8 驱动程序,右键单击我的服务器,然后在属性中,然后是安全性,我启用了 SQL Server 和 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
}

这终于奏效了!!!!!!!!!!!!!!

最新更新