Javascript TypeError:sqlDb.Connection不是使用Node.js的Rest服务中的构造函数

Javascript TypeError:sqlDb.Connection不是使用Node.js的Rest服务中的构造函数,javascript,sql-server,node.js,rest,Javascript,Sql Server,Node.js,Rest,我正在使用Node.js构建一个简单的REST服务 当我发送一个GET请求时,我收到一个错误,上面写着: TypeError:sqlDb.Connection不是Object.exports.executeSql上的构造函数 这是我的代码。 settings.js exports.dbConfig = { user: "sa", password: "sam", server: "localhost\\1433", database: "SampleDb", port: 14

我正在使用Node.js构建一个简单的REST服务

当我发送一个
GET
请求时,我收到一个错误,上面写着:

TypeError:sqlDb.Connection不是Object.exports.executeSql上的构造函数

这是我的代码。

settings.js

exports.dbConfig = {
  user: "sa",
  password: "sam",
  server: "localhost\\1433",
  database: "SampleDb",
  port: 1433
};
exports.webPort = 9000;
var sqlDb = require("mssql");
var settings = require("../settings");

exports.executeSql = function(sql, callback) {

  var conn = new sqlDb.Connection(settings.dbConfig);
  conn.connect()
  .then(function() {
    var req = new sqlDb.Request(conn);
    req.query(sql)
    .then(function(recordset) {
      callback(recordset);
    })
    .catch(function(err) {
      console.log(err);
      callback(null, err);
    });
  })
  .catch(function(err) {
    console.log(err);
    callback(null, err);
  });
};
var db = require("../core/db");
exports.getList = function(req, resp) {
  db.executeSql("SELECT * FROM emp", function(data, err) {
    if (err) {
      resp.writeHead(500, "Internal Error Occoured", {
        "Content-type": "text/html"
      });
      resp.write("<html><head><title>500</title></head><body>500: Internal Error, Details:" + err + "</body></html>");
      resp.end();
    } else {
      resp.writeHead(200, {
        "Content-Type": "application/json"
      });
      resp.write(JSON.stringify(data));
    }
    resp.end();
  });
};
db.js

exports.dbConfig = {
  user: "sa",
  password: "sam",
  server: "localhost\\1433",
  database: "SampleDb",
  port: 1433
};
exports.webPort = 9000;
var sqlDb = require("mssql");
var settings = require("../settings");

exports.executeSql = function(sql, callback) {

  var conn = new sqlDb.Connection(settings.dbConfig);
  conn.connect()
  .then(function() {
    var req = new sqlDb.Request(conn);
    req.query(sql)
    .then(function(recordset) {
      callback(recordset);
    })
    .catch(function(err) {
      console.log(err);
      callback(null, err);
    });
  })
  .catch(function(err) {
    console.log(err);
    callback(null, err);
  });
};
var db = require("../core/db");
exports.getList = function(req, resp) {
  db.executeSql("SELECT * FROM emp", function(data, err) {
    if (err) {
      resp.writeHead(500, "Internal Error Occoured", {
        "Content-type": "text/html"
      });
      resp.write("<html><head><title>500</title></head><body>500: Internal Error, Details:" + err + "</body></html>");
      resp.end();
    } else {
      resp.writeHead(200, {
        "Content-Type": "application/json"
      });
      resp.write(JSON.stringify(data));
    }
    resp.end();
  });
};
employee.js

exports.dbConfig = {
  user: "sa",
  password: "sam",
  server: "localhost\\1433",
  database: "SampleDb",
  port: 1433
};
exports.webPort = 9000;
var sqlDb = require("mssql");
var settings = require("../settings");

exports.executeSql = function(sql, callback) {

  var conn = new sqlDb.Connection(settings.dbConfig);
  conn.connect()
  .then(function() {
    var req = new sqlDb.Request(conn);
    req.query(sql)
    .then(function(recordset) {
      callback(recordset);
    })
    .catch(function(err) {
      console.log(err);
      callback(null, err);
    });
  })
  .catch(function(err) {
    console.log(err);
    callback(null, err);
  });
};
var db = require("../core/db");
exports.getList = function(req, resp) {
  db.executeSql("SELECT * FROM emp", function(data, err) {
    if (err) {
      resp.writeHead(500, "Internal Error Occoured", {
        "Content-type": "text/html"
      });
      resp.write("<html><head><title>500</title></head><body>500: Internal Error, Details:" + err + "</body></html>");
      resp.end();
    } else {
      resp.writeHead(200, {
        "Content-Type": "application/json"
      });
      resp.write(JSON.stringify(data));
    }
    resp.end();
  });
};
var db=require(“../core/db”);
exports.getList=函数(请求、响应){
db.executeSql(“从emp中选择*”,函数(数据,错误){
如果(错误){
响应写头(500,“发生内部错误”{
“内容类型”:“文本/html”
});
分别写入(“500500:内部错误,详细信息:+err+”);
分别结束();
}否则{
负责人(200{
“内容类型”:“应用程序/json”
});
分别写入(JSON.stringify(数据));
}
分别结束();
});
};

连接
更改为
连接池

 const conn = new sqlDb.ConnectionPool(settings.dbConfig);
 conn.connect();
从mssql包的npm文档中:

3.x到4.x的变化-
连接
已重命名为
连接池

接下来,我刚刚在升级node.js模块时遇到了这个问题,但由于还必须支持旧代码,我不得不编写一个在这两种情况下都可能无缝出错的方法:

function CreateDbConnection(callback) {
    let connectionFunc = null;
    if (sql.ConnectionPool)
        connectionFunc = sql.ConnectionPool;
    else
        connectionFunc = sql.Connection;
    let connection = new connectionFunc(settings.sqlConfig, function (err) {
        if (err) {
            logger.error('Error connecting to database: ' + (err.message || err));
            callback("ERROR", null);
        } else {
            callback(null, connection);
        }
    });
}
这将检查可用的方法并使用它

实际使用示例:

CreateDbConnection(function (err, connection) {
    if (err) {
        console.log('connection failed');
    } else {
        console.log('Doing stuff with connection...');
        //important to close when done:
        connection.close();
    }
});

你的意思是使用
连接池
。我指的是一个旧的教程,这是一个新的关键字?因为在教程中说要使用>Connection@JohannesMerz谢谢。我尝试了上面的更改,但仍然抛出未定义。我尝试了更改,但仍然抛出未定义。