使用Node.js、mssql和express无法连接到Microsoft SQL Server

4
我正在尝试学习Node.js,并创建了一个简单的项目来查询本地数据库。但是,我收到了“无法查找实例”的错误消息。
我已经检查了在services.msc中运行的SQL Server服务。

services.msc picture

我已验证TCP/IP已启用。

configurations manage pic

我已经尝试过使用用户名和密码登录,也尝试了不使用。我在 SQL Server Management Studio 中连接到本地数据库,连接字符串为 (localdb)\v11.0,以下是属性的截图:

image of SQL Server connection properties

我做错了什么?实际的用户名和密码应该是什么?服务器名称应该是什么?
const sql = require('mssql');

// config for your database
const config = {
    user: 'mywindows username',
    password: 'my windows password',
    server: '(localdb)\\v11.0', 
    database: 'test',
    options: {
        encrypt: true
      } 
};
console.log('starting sql');

var connection = new sql.connect(config, function(err) {
    console.log(err);
    var request = new sql.Request(connection); 
    request.query('select * from employees', function(err, recordset) {
       if(err)      // ... error checks 
            console.log('Database connection error');

    console.dir("User Data: "+recordset);
    });
});
sql.close();
console.log('ending sql');    
});

app.listen(3002, () => {
    console.log('Listening on port 3002');})

以下是错误信息。

{ 连接错误: 在 (localdb) 上查找实例失败 - getaddrinfo ENOTFOUND (localdb) at Connection.tedious.once.err (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\mssql\lib\tedious.js:244:17) at Object.onceWrapper (events.js:285:13) at Connection.emit (events.js:197:13) at InstanceLookup.instanceLookup (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\connection.js:945:16) at sender.execute (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\instance-lookup.js:66:13) at GetAddrInfoReqWrap.invokeLookupAll [as callback] (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\sender.js:43:16) at GetAddrInfoReqWrap.onlookupall [as oncomplete] (dns.js:70:17) code: 'EINSTLOOKUP', originalError: { ConnectionError: 在 (localdb) 上查找实例失败 - getaddrinfo ENOTFOUND (localdb) at ConnectionError (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\errors.js:13:12) at InstanceLookup.instanceLookup (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\connection.js:945:32) at sender.execute (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\instance-lookup.js:66:13) at GetAddrInfoReqWrap.invokeLookupAll [as callback] (C:\Users\vndbsubramaniam\Desktop\React projects\ReactWithSql\node_modules\tedious\lib\sender.js:43:16) at GetAddrInfoReqWrap.onlookupall [as oncomplete] (dns.js:70:17) message: '在 (localdb) 上查找实例失败 - getaddrinfo ENOTFOUND (localdb)', code: 'EINSTLOOKUP' }, name: 'ConnectionError' } 数据库连接错误

2个回答

6

在这个问题上,我苦苦挣扎了数小时,最终在这里找到了答案:SQL to Node connection

看起来我需要添加 msnodesqlv8 包,并将驱动程序语法添加到配置中。

app.get('/test', (req, res) => {

const sql = require('mssql/msnodesqlv8');

// config for your database
const config = {
    database: 'test',
    server: '(localdb)\\v11.0',
    driver: 'msnodesqlv8',
    options : {
        trustedConnection : true
    }
};
console.log('starting sql');

const pool = new sql.ConnectionPool(config);
pool.connect().then(() => {
    //simple query
    pool.request().query('select * from employees', (err, result) => {
          if(err) res.send(err)
          else{
              return res.json({
                  data : result.recordset
              })
          }
      })
      sql.close();
})    
console.log('ending sql');    

});


1
你需要msnodesqlv8驱动程序,将其粘贴到require中,如下所示: var sql = require('mssql/msnodesqlv8'), 同时,你还需要在配置对象的驱动程序部分包含它。
var config = {
    user:"*****",
    password:"*****",
    database:"*****",
    driver: 'msnodesqlv8',
    server:"*****",
    options: {
        trustedConnection : true
        }
}

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