Вопрос:

TypeError: sqlDb.Connection не является конструктором в Rest Service с использованием Node.js

javascript sql-server node.js rest

4307 просмотра

2 ответа

489 Репутация автора

Я создаю простой REST-сервис с Node.js

Когда я отправляю 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;

db.js

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);
  });
};

employee.js

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();
  });
};
Автор: Sameera Sampath Источник Размещён: 30.12.2017 10:52

Ответы (2)


11 плюса

4045 Репутация автора

Решение

Изменить ConnectionнаConnectionPool

 const conn = new sqlDb.ConnectionPool(settings.dbConfig);
 conn.connect();

Из документации npm пакета mssql:

3.x в 4.x изменения - Connectionпереименован в ConnectionPool.

https://www.npmjs.com/package/mssql#3x-to-4x-changes

Автор: gokcand Размещён: 30.12.2017 10:59

2 плюса

58244 Репутация автора

После правильного ответа у меня возникла эта проблема при обновлении модулей 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();
    }
});
Автор: Shadow Wizard Размещён: 20.05.2019 12:04
Вопросы из категории :
32x32