node-mssql无法从dbconfig用户名

时间:2018-01-30 14:27:18

标签: sql-server node.js express node-mssql

你好,我正在寻找这个问题的一些帮助 我正在为我的db工作休息api得到了这个问题

  

var bufferLength = 64 + domain.length * 2 + username.length * 2 + lm   v2len + ntlmv2len + 8 + 8 + 8 + 4 + server_data.length + 4;

     

TypeError:无法读取未定义的属性“length”

我已经尝试了几种方法来解决这个问题,但没有任何帮助。在线发布的解决方案根本无法在我的机器上运行或由于某种原因返回相同的错误

有我的代码

const sql = require('mssql');
const express = require('express')
const app = express()


var config = {
  userName: 'user' , 
  password: 'pass', 
  domain: "AD",
  server: serversIP,
  database: 'test',
  port: 2222,
  debug: true,
  driver: 'tedious',
  options: {
    database:"test",
    instanceName : "instance"
  } 
}

app.get("/getUsers" , (req, res)=>{
  sql.connect(config, function (err) {
    var request = new sql.Request();
    if (err) {
        console.log(err);
        return;
    }
      req.query("SELECT * FROM test").then(function (recordset) {
          console.log(recordset);
          conn.close();
      })
      .catch(function (err) {
          console.log(err);
          conn.close();
      });       
  })
});

三是完整错误消息

  

[nodemon]起始节点server.js Express服务器侦听端口NaN

     

在端口3000上以%s模式

     

C:\用户\用户\文档\ dbtest \ node_modules \乏味\ lib中\ NTLM-payload.js:44

     

var bufferLength = 64 + domain.length * 2 + username.length * 2 +   lmv2len + ntlmv2len + 8 + 8 + 8 + 4 + server_data.len gth + 4;

     

TypeError:无法读取

中未定义的属性“length”      

NTLMResponsePayload.createResponse   新的NTLMResponsePayload上的(C:\ Users \ User \ Documents \ dbtest \ node_modules \ tedious \ lib \ ntlm-payload.js:44:59)

     Connection.sendNTLMResponsePacket上的

(C:\ Users \ User \ Documents \ dbtest \ node_modules \ tedious \ lib \ ntlm-payload.js:23:22)   Connection.receivedChallenge上的(C:\ Users \ User \ Documents \ dbtest \ node_modules \ tedious \ lib \ connection.js:981:21)   (C:\用户\用户\文件\ dbtest \ node_modules \乏味\ lib中\ connection.js:1641:21)   在Connection.dispatchEvent   (C:\用户\用户\文件\ dbtest \ node_modules \乏味\ lib中\ connection.js:857:45)   在Connection.processLogin7NTLMResponse   (C:\用户\用户\文件\ dbtest \ node_modules \乏味\ lib中\ connection.js:1153:21)   在Connection.message   (C:\用户\用户\文件\ dbtest \ node_modules \乏味\ lib中\ connection.js:1647:21)   在Connection.dispatchEvent   (C:\用户\用户\文件\ dbtest \ node_modules \乏味\ lib中\ connection.js:857:45)   在MessageIO。   (C:\用户\用户\文件\ dbtest \ node_modules \乏味\ lib中\ connection.js:751:18)   在emitNone(events.js:86:13)

但是它自己与此

连接
const Connection = require('tedious').Connection;
var connection = new Connection(config);
connection.on('connect', function(err) {
      if (err) {
        console.log(err);
      } else {
        console.log("server is connected to DB")
      }}
 );

寻求一些帮助来解决这个问题,谢谢

1 个答案:

答案 0 :(得分:2)

你的问题是,用户名属性是user而不是userName,看起来像node-mssql为userName创建一个别名,然后从中分配变量username userName在繁琐的图书馆里。然后,在尝试访问username.length时,usernameundefined,导致您的TypeError,因为undefined无法获得长度。您可以在source on the tedious github

中看到这一点
var config = {
  user: 'user' , 
  password: 'pass', 
  domain: "AD",
  server: 'db.domain.local',
  database: 'test',
  port: 2222,
  debug: true,
  driver: 'tedious',
  options: {
    database:"test",
    instanceName : "instance"
  } 
}